针对多种情况的第二个Linq过滤器

时间:2013-04-05 05:53:00

标签: 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 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声明中做到这一点吗,I.E。我可以将它与上面的线组合吗?最好的方法是什么?

2 个答案:

答案 0 :(得分:6)

您可以在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();

答案 1 :(得分:0)

为什么不尝试将这些条件添加到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