我有一个课程(简化)如下:
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。我可以将它与上面的线组合吗?最好的方法是什么?
答案 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