首页 > 解决方案 > 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的名字。

如何在提供值的字段中不匹配空值?

标签: entity-framework

解决方案


尚未测试,但不会像这样工作。

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))

请原谅格式。使用我的手机:)


推荐阅读