C# 多条件下的第二个Linq滤波器

C# 多条件下的第二个Linq滤波器,c#,linq,C#,Linq,我的课程(简化)如下: 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 listItem

我的课程(简化)如下:

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()
var hiddenApps=List();
//填充hiddenApps
var listItems=列表;
//填充列表项
List apps=AppMeta.Collection(listItems).Where(i=>!hiddenApps.Contains(i.Id)).ToList()
我的问题是,我需要进一步筛选此列表,如下所示

(其中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();
List apps=AppMeta.Collection(listItems)
.Where(i=>!hiddenApps.Contains(i.Id)
&&i.范围==“用户”
&&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();
var loginName=CurrentUser.loginName;
列表应用程序=AppMeta.Collection(listItems)
其中(i=>!hiddenApps.包含(i.Id)和
i、 作用域==“用户”&&
i、 CreatedBy==loginName)
.ToList();

只要确保
CurrentUser.LoginName
类型为
User

就可以了。一旦我测试了它,系统允许我,我会标记它。