2016-08-29 79 views
2

我想獲取兩個列表lstJobs和lstPraudits中的字符串列表。我想要得到兩個列表中常見的PlanId。使用lambda表達式比較兩個列表

這裏是我的代碼 -

List<string> result=reviewModel.lstJobs.Select(x=>x.planId.Contains(reviewModel.lstPraudits.Slect(y=>y.PlanId).toList())); 

我做錯了這裏。代碼給出錯誤信息。

+1

除非您自己定義了這些方法,否則錯誤消息的來源可能會錯過拼寫標識符,如'Slect'和'toList'。 –

+0

您錯過拼寫選擇 – Developer

+0

planId的類型是什麼?它是一個集合嗎?另外我看到Select的拼寫在內部查詢中是錯誤的。 –

回答

3

使用Enumerable.Intersect

List<string> result = reviewModel.lstJobs.Select(x=> x.PlanId) 
    .Intersect(reviewModel.lstPraudits.Select(y=> y.PlanId)) 
    .ToList(); 

我做錯了這裏

你的做法有什麼不對,因爲x.planId.Contains將搜索字符串和要傳遞一個列表的方法。無論如何,這是錯誤的方法,因爲你不想比較子字符串。

+0

感謝這是正確的方法。 –

0

使用Intersect是一個很好的方法..但是如果你說你在做什麼錯,我會說你在錯誤的東西上迭代。根據您的應用程序的查詢應該是:

List<string> result = reviewModel.lstJobs.Select(x => reviewModel.lstPraudits.Select(y=>y.PlanId).Contains(x.planId)) 
0

使用Where兩個List之間進行比較。

List<string> result = 
     reviewModel.Where(x => x.planId.Contains(reviewModel.lstPraudits.Select(y=>y.PlanId))) 
     .ToList();