【问题标题】:Entity Framework Linq Query using multiple where使用多个 where 的实体框架 Linq 查询
【发布时间】:2020-07-19 19:34:14
【问题描述】:

多个.Where() 是充当AND (&&) 还是充当Or (||) 例如:

 var db = new myContext();
 var query = db.User.Where(u => u.Gender == "Male");
 query = query.Where(u => u.IsActive == true);

是否等同于:

   Select *
   from user
   where gender = 'Male' 
     and IsActive = true;

【问题讨论】:

  • 根据网站规则,您应该进行一些研究并展示您尝试过的内容。你试过了吗?
  • 是的,我做到了,我发现它的作用是,但没有答案澄清它@TomTom
  • so what Then act 是充当 And or Or 运算符@ah
  • 不,它显然添加为 AND。多个 Where 子句进一步限制。其他任何事情都是不合逻辑的。第一个输出在哪里运行到第二个位置。

标签: c# entity-framework linq filter


【解决方案1】:

您将一个过滤器的结果传递给另一个过滤器,因此从逻辑上讲,它们的行为类似于“与”。

假设你有一副纸牌。然后,您使用只给您红牌的“过滤器”。然后,您希望将结果传递给另一个过滤器,该过滤器只为您提供七人制。

因此,您可以有效地获得红色且价值为 7 的卡片。

有没有办法改变这种行为并使其充当“或”?

不,没有办法获取具有Where 子句的查询并“附加”第二个Where 子句,其作用类似于or

如果您尝试使用“或”操作动态附加过滤器,最直接的方法是将两个谓词与“或”组合(请参阅"Or" equivalent in Linq Where() lambda expression

另一种方法是重新使用原始查询,使用两个单独 Where 查询和Union 结果。

var result1 = a.Where(u => u.Gender == "Male");
var result2 = a.Where(u => u.IsActive == true);

var result = result1.Union(result2);

但是这种“间接” OR 子句可能存在性能问题

【讨论】:

  • 有没有办法改变这种行为并使其充当“或”。这样做的目的是使用查询生成器还是动态查询? @D 斯坦利
【解决方案2】:

只需使用&& 运算符:

var query = db.User.Where(u => u.Gender == "Male" && u.IsActive == true);

&& 运算符表示and。上面的条件可以理解为 get all users with gender=="Male" and isActive=="true"

【讨论】:

    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多