2013-07-17 35 views
-2

我有2個集合col1和col2。我希望col1中的選擇記錄在col2中不匹配。在col1中有0到6,在col2中有1到6個數字,我想要0,因爲0在col2中不匹配。使用linq從兩個集合中選擇不匹配的記錄

兩個集合都有不同的類型,兩個集合中都有一個字段ID。

我正在使用c#4.0(Linq)。

+0

我可以知道任何原因?????? –

+0

你沒有表現出你自己完成這項任務的努力,你沒有提供顯示你的問題的代碼,你的問題最初錯過了最重要的部分 - 這些收集不是簡單的數字。 –

回答

4

您需要Except方法:

var yourResult = col1.Except(col2); 

如果同時收藏集是不一樣的類型,那麼你將不得不做一個更昂貴的O(nm)搜索:

var selectedTwo = col2.Select(x => x.ID).ToHashSet(); 
var yourResult = col1.Where(n => !selectedTwo.Contains(n.ID)); 

並在您的代碼中的其他地方:

public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source) 
{ 
    return new HashSet<T>(source); 
} 
+0

+1擊敗我吧 –

+0

其實我的兩個系列都不一樣。所以Except不會工作。任何替代請。 –

+0

@JasRajBishnoi是的,一個更昂貴的O(nm)搜索,而不是通過Except授予的(最好的情況,通常情況下)O(n + m)。 –

0

假設您的類型[R collectionstring THN

var resultCol = new List<string>(); 

col1.ToList().ForEach(item => { 
    if(!col2.Contains(item)) 
     resultCol.Add(item); 
}); 
+1

這將不會編譯,具有多個,多個錯誤。 –

+0

@Ashok Damani:兩個集合不是相同的類型 –

+0

@JasRaj Bishnoi:你提到它在你的問題 –

1

對於不同的集合,你可以試試爲什麼負紀念這一

var outputarray = 
        FirstList.Except(
        (from first in FirstList 
        join second in SecondList 
        on first.id equals second.id 
        select first).ToList()); 
相關問題