第二个多条件Linq滤波器
本文关键字:滤波器 Linq 条件 第二个 | 更新日期: 2023-09-27 18:07:25
我有一个类(简化)如下:
class AppMeta
{
public int Id { get; set; }
public string Scope { get; set; }
public User CreatedBy { get; set; }
}
我已经创建了一个LINQ语句,通过交叉引用整数列表来正确过滤结果,并丢弃匹配:
var hiddenApps = List<int>();
//populate hiddenApps
var listItems = List<rawdata>;
//populate listItems
List<AppMeta> apps = AppMeta.Collection(listItems).Where(i => !hiddenApps.Contains(i.Id)).ToList()
我的问题是,我需要进一步过滤这个列表如下,
(Where Scope == "user" && Where User.LoginName == CurrentUser.LoginName)
我仍然可以在一个Linq语句中这样做吗?也就是说,我可以将它与上面的行合并吗?最好的方法是什么?
可以在Where
子句中指定多个条件。将Where子句修改为:
.Where(i => !hiddenApps.Contains(i.Id)
&& i.Scope == "user"
&& i.CreatedBy.LoginName == CurrentUser.LoginName )
所以你的查询应该是:
List<AppMeta> apps = AppMeta.Collection(listItems)
.Where(i => !hiddenApps.Contains(i.Id)
&& i.Scope == "user"
&& i.CreatedBy.LoginName == CurrentUser.LoginName)
.ToList();
与其创建另一个查询,不如尝试将这些条件添加到您的Where
方法中?
var loginName = CurrentUser.LoginName;
List<AppMeta> apps = AppMeta.Collection(listItems)
.Where(i => !hiddenApps.Contains(i.Id) &&
i.Scope == "user" &&
i.CreatedBy == loginName )
.ToList();
确保CurrentUser.LoginName
类型为User