在 C# 中使用 EF 查询中的多个 Where 子句

Igo*_*hov 4 c# entity-framework iqueryable

我有两个 IQueryable 查询:

IQueryable<Ad> list1 = db.Ads.Where(x=>x.isModerated == true);
IQueryable<Ad> list2;

if(something == true)
{
    list2 = list1.Where(x=>x.TypeId == 2) 
    // is it going to be the same as query below?
    IQueryable<Ad> list1 = db.Ads.Where(x=>x.isModerated == true && x.TypeId == 2)   
}
Run Code Online (Sandbox Code Playgroud)

如果我想使用 OR (||) 运算符获取数据,情况是一样的。

我相信这将是一个数据库调用,直到我想迭代这个查询。对?

Cha*_*had 5

它会与下面的查询相同吗?

是的

如果我想使用 OR (||) 运算符获取数据,情况是一样的。

这样做的资源成本要低得多:

IQueryable<Ad> list1 = db.Ads.Where(x=>x.isModerated);
IQueryable<Ad> list2;

if(something == true)
{
    list2 = list1.Where(x=>x.TypeId == 2) 
}
else 
{
    list2 = db.Ads.Where(x=>x.isModerated  || x.TypeId == 2)  
}
Run Code Online (Sandbox Code Playgroud)

但是如果由于某种原因你不想这样做,你可以这样做:

list2 = list1.Union(db.Ads.Where(x=> x.TypeId == 2)) 
Run Code Online (Sandbox Code Playgroud)

会给你相同的结果集