0

我有一个类(简化)如下:

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 语句中做到这一点,IE 我可以将它与上面的行结合起来吗?最好的方法是什么?

4

2 回答 2

7

您可以在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();
于 2013-04-05T05:55:48.037 回答
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

于 2013-04-05T06:04:40.787 回答