2013-04-05 27 views
0

我有一個類(簡化)如下:二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.我可以將它與上面的行結合使用嗎?什麼是最好的方法來做到這一點?

回答

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(); 
+0

看起來不錯。只要我測試它,系統讓我,我會標記它。 – Wesley 2013-04-05 05:57:44

+0

@韋斯利,很高興它爲你工作:) – Habib 2013-04-05 06:05:23

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