避免使用多个where子句的Lambda表达式

本文关键字:子句 Lambda 表达式 where | 更新日期: 2023-09-27 18:07:28

如何在单个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
                              };

在上面的表达式,我需要得到结果,即使没有条件匹配或其中任何一个匹配。或者其中两个匹配

避免使用多个where子句的Lambda表达式

在你的lambda表达式运算符逻辑仍在发挥作用,并将为您提供您所需要的,如果我明白你想要什么,说,例如,我们采取这个

.Where(a=> a.ID == someId);

假设这将是我们的一个标准,现在为了添加第二个标准,您可以使用&&和| |

.Where(a=> (a.ID == someId) && ((a.ID < 50) && (a.ID > 5)));

如果你想正确地分组布尔检查,括号是很重要的。

我不完全明白,你可以在where: list上使用多重标准。其中(x=> (condition1) || (condition2))。要获得整个列表,只需在后面添加一个if:

var filteredList = myList.where(x=> (conditions1(x)) || (condition2(x))).toList();
if (filteredList.count == 0)
    filteredList = myList;