如何在单个lambda表达式中定义多个where子句。我需要的是,如果lambda表达式找到带有匹配条件的结果,那么它只过滤掉那些记录,否则它将返回所有记录。我想在一个lambda表达式中得到它。因为我有多个标准,我必须使用lambda表达式从数据库中过滤记录。
我不想使用if else条件然后相应地更改我的lambda表达式。我想用一个表达式来实现这个目标。
var objList = from o in db.sometable
join p in db.sometable1 on o.sometable1Id equals p.Id
join q in db.sometable2 on p.Id equals q.Id
join r in db.sometable3 on p.Id equals r.Id
join s in db.sometable4 on o.id equals s.Id
where r.1stcriteria == X || r.2ndCriteria == Y || r.3rdCriteria == Z
select new
{
o.Id,
r.X,
r.Y,
s.Name,
o.area_sold,
p.stock
};
在上面的表达式中,我需要得到结果,即使没有标准匹配或者其中任何一个匹配。或者甚至其中两个匹配。
答案 0 :(得分:1)
我不完全明白,你可以在其中使用多重标准:list.where(x =>(condition1)||(condition2))。要获得整个列表,只需添加一个,如果之后:
var filteredList = myList.where(x=> (conditions1(x)) || (condition2(x))).toList();
if (filteredList.count == 0)
filteredList = myList;
答案 1 :(得分:1)
在你的lambda表达式中,操作符逻辑仍在运行中,如果我理解了你想要的东西,它会为你提供你需要的东西,比如说我们接受这个
.Where(a=> a.ID == someId);
说这将是我们的一个标准,现在为了添加一秒,您可以使用&&添加AND或OR逻辑到混音。和||
.Where(a=> (a.ID == someId) && ((a.ID < 50) && (a.ID > 5));
如果您想正确地对布尔检查进行分组,则括号很重要。