首页 > 解决方案 > C# LINQ - 仅当它不为空时才包含 Where 条件

问题描述

我有多个输入参数,我想在 where 子句中检查,但我只想检查参数是否为空。如果它不为空,那么我不希望该参数出现在 where 子句中。

当前工作是这样的:

if(userId != null){
list.Where(x=> x.Id == id && x.UserId == userId);
}
else{
list.where(x=> x.Id == id)
}

如果我们有多个可以为 null 或不为 null 的参数,这是不可行的,因为它会创建嵌套的 if 条件。这里最好的解决方案是什么?

标签: c#.netlinq

解决方案


在这种情况下,我建议使用IEnumerable, 并结合查询:

var query = list.Where(x=> x.Id == id);

if (userId != null)
{
   query = query.Where(x => x.UserId == userId);
}

var result = query.ToList();

同样的方法适用于IQueryable


推荐阅读