第二个多条件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语句中这样做吗?也就是说,我可以将它与上面的行合并吗?最好的方法是什么?

第二个多条件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