2008-09-01 63 views
15

我有一個List<int>List<customObject>。 customObject類有一個ID屬性。我如何才能獲得僅包含使用LINQ的ID屬性在List<int>中的對象的List<customObject>過濾linq名單的財產價值

編輯:我接受Konrads的答案,因爲它更容易/更直觀地閱讀。

回答

16
var result = from o in objList where intList.Contains(o.ID) select o 
+0

是不是Linq`.Where`方法更簡潔? (請參閱下面的答案) – 2013-11-07 13:24:58

6

未經檢驗的,但它會是這樣的:

var matches = from o in objList 
        join i in intList on o.ID equals i 
        select o; 

@Konrad只是測試它,和它的工作 - 我只是在那裏我會寫「i.ID」,而不是一個錯字「一世」。

2

只是爲了完整性(也許更容易閱讀?),用「裏」類似於馬特的「加盟」:

var matches = from o in customObjectList 
       from i in intList 
       where o.ID == i 
       select o; 
10

我有過類似的問題,剛纔和使用低於解決方案如果已經有對象列表,則可以刪除int列表中找不到的所有對象,只留下objList中的匹配項。

objList.RemoveAll(x => !intList.Contains(x.id)); 
0

請注意,使用連接而不是包含列表中的項目數量超過49時不起作用!你會得到錯誤:Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.

8
using System.Linq; 

objList.Where(x => intList.Contains(x.id));