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

Avoid Lambda expression with multiple where clause

我们如何在单个 lambda 表达式中定义多个 where 子句。我需要的是,如果 lambda 表达式找到符合条件的结果,那么它只会过滤掉那些记录,否则它将 return 所有记录。我想在一个 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

                              };

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

我不太明白,你可以在where上使用多个条件:list.where(x=> (condition1) || (condition2))。要获得整个列表,只需在之后添加一个:

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

if (filteredList.count == 0)
    filteredList = myList;

在你的 lambda 表达式中,运算符逻辑仍在发挥作用,如果我理解你想要什么,它将为你提供你需要的东西,例如我们采用这个

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

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

在组合中添加 AND 或 OR 逻辑
.Where(a=> (a.ID == someId) && ((a.ID < 50) && (a.ID > 5)));

如果您想正确分组布尔检查,括号很重要。