entity-framework - EF 条件查询以匹配任何可用信息不起作用
问题描述
我正在尝试使用 Linq to Entity 编写一个查询,通过我的对象中可用的 3 个属性中的任何一个来搜索员工。
我的对象有名字、姓氏和出生日期。
我的查询看起来像这样(搜索是包含部分或完整信息的对象)
var results = ctx
.emp
.Where(p =>
p.Fname == (search.Firstname ?? p.Fname)
&& p.Lname == (search.Lastname ?? p.Lname)
&& p.Dob == (search.Dob ?? p.Dob ))
问题是上面的查询在这 3 列中的每一列中都匹配具有空值的员工以及匹配值。例如,如果我提供search.Firstname
的是John
,它匹配每个人的名字John
和每个人null
的名字。
如何在提供值的字段中不匹配空值?
解决方案
尚未测试,但不会像这样工作。
var results = ctx
.emp
.Where(p => (search.Firstname == null ? p.Fname == p.Fname : p.Fname == search.Firstname) ||
(search.Lastname == null ? p.Lname == p.Lname : p.Lname == search.Lastname) ||
(search.Dob == null ? p.Dob == p.Dob : p.Dob == search.Dob))
请原谅格式。使用我的手机:)
推荐阅读
- javascript - 使用 mapStateWithProps 后,React redux 无法在组件事件中找到道具
- c# - 过滤或检查日期范围内的日期
- visual-studio-code - 如何增加 VS Code 中“最近打开”中列出的文件夹/工作区的数量?
- c# - 使用 C# 下载 URL Content-Disposition excel 文件
- android - Android:上下文菜单项单击导致变量改变状态
- android - Worker manager doWork()方法无法执行,但是onStartWork()被多次调用
- python - Python Selenium 自动关注 Instagram
- python-3.x - 在python中检索列列表中的第一个元素并对其求和(例如,如果第一个元素= k,对k求和)
- html - 如何在不完全重新加载页面的情况下更改 HTML/模板
- mysql - count(distinct(person_id)) 不能与 MySQL 数据库中的窗口函数一起使用