2011-10-25 32 views
11

的陣列(或清單)這似乎將是很容易LINQ如何選擇與孩子集合,其中包含一個父一個或多個值

var orx = gg.Where(x=>x.ProductAttributes.Any (pa =>pa.AttributeId == "home")); 
當產品屬性

回報GG有一個值「家」

我需要它返回的位置和GG已經產品屬性從數組值 即

var orx = gg.Where(x=>x.ProductAttributes.Any (pa =>pa.AttributeId in "home,work")); 
+0

的可能重複[Linq的到實體 - Sql「IN」子句](http://stackoverflow.com/questions/857973/linq-to-entities-sql-in-clause) – jrummell

回答

21

怎樣......

string[] values = new string[] { "home", "work" }; 
var orx = gg.Where(x => x.ProductAttributes.Any(pa => values.Contains(pa.AttributeId)); 

或甚至"home,work".Contains(pa.AttributeId)應該工作,如果你的列表是可靠的,你的例子。 (絕不意味着我建議,除非你能保證屬性Id不會是任何單詞列表的一個子..如「我」)

+0

''home,work「.Contains(pa.AttributeId)'will返回錯誤的結果,如果任何AttributeIds將成爲'家庭'或'工作'的一部分的話,例如'ork' ... – sll

+0

@sll:是的,這就是爲什麼我說「如果你的名單是像你的例子一樣可靠「 – musefan

+1

這是我錯過的語法,讓它倒退 – jason

4

使用Enumerable.Contains()

var orx = gg.Where(x => x.ProductAttributes 
         .Any(pa => 
          array.Containspa(pa.AttributeId)); 

var orx = gg.Where(x => x.ProductAttributes 
         .Any(pa => 
          "home, work".Split(',').Contains(pa.AttributeId)); 
相關問題