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

时间:2018-07-18 20:28:02

标签: 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)   
}

,如果我想使用OR(||)运算符获取数据该怎么办?

在我要迭代此查询之前,我相信它将是一个数据库调用。对?

3 个答案:

答案 0 :(得分:2)

  

与下面的查询相同吗?

  

如果要使用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)  
}

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

list2 = list1.Union(db.Ads.Where(x=> x.TypeId == 2)) 

将为您提供相同的结果集

答案 1 :(得分:1)

正如我所注意到的,您确实有一个查询,其中有一个名为list1的where子句,如果确实具有相等的值,则将添加另一个where子句,以便采用我认为更精简,更简单的方法。

IQueryable<Ad> list1 = db.Ads.Where(x => (x.isModerated == true) && (something != true || x.TypeId == 2));

List<Ad> fetchedAds = list1.ToList();

答案 2 :(得分:0)

export class heroStepComponent implements OnInit {
  constructor(){
    ...
  }

  ngOnInit(){
    ...
  }

  stepChanged(event, stepper){
    stepper.selected.interacted = false;
  }
}

是的-会一样。