2013-02-21 75 views
-5

我有以下項目Lambda多個條件來驗證對象列表中的列表?

List<person> lst = new List<person>() 
lst.Add(new person(){ name="abc", age="24" }); 
lst.Add(new person(){ name="xyz", age="25" }); 
lst.Add(new person(){ name="zxc", age="28" }); 
lst.Add(new person(){ name="wer", age="38" }); 

List<string> strlst = new List<string>(); 
strlst.Add("abc"); 
strlst.Add("zxc"); 

現在我確認名單

lst.Exists(a => strlst.Contains(a.name)) 

我如何驗證整個列表,如果它包含「ABC and xyz`兩者組成的列表?

回答

1

糾正我,如果我錯了,但我相信你的本意是驗證對你lst變量,而不是strlst。如果是strlist,那麼我相信@ LosManos的答案是一個非常好的方法。如果你想驗證List<person> lststrlst的值,那麼你應該做到以下幾點:

var allNames = lst.Select(l => l.name); 
var containsAll = strlist.All(s => allNames.Contains(s)); 

這種方式也將確保你能做到這一點正確的,即使你有兩個以上的東西,你需要比較上。

+1

請注意,這是一個相當低效的操作,因爲您正在爲您搜索的每個字符串執行所有人員的線性搜索,所以它不能很好地適用於大數據集。對於小數據集,它會很好。 – Servy 2013-02-21 14:54:40

+0

你能提出任何其他方法嗎? – Pravin 2013-02-21 15:05:14

+0

@Pravin當然,請看我的答案。 – Servy 2013-02-21 15:08:39

2

如果您發現兩個名稱中的Intersect,您將得到兩個列表的共同名稱。如果該交叉點與您的字符串列表大小相同,則意味着它們都位於交叉點中,這意味着它們都在另一個列表中。

return list.Select(person => person.name) 
     .Intersect(strlst).Count() == strlst.Count(); 
+0

感謝其爲我服務的服務.. – Pravin 2013-02-21 15:09:50