使用linq从两个集合中选择不匹配的记录

时间:2013-07-17 07:20:25

标签: c# linq entity-framework

我有2个集合col1和col2。我希望col1中的选择记录在col2中不匹配。在col1中有0到6,在col2中有1到6个数字,我想要0,因为0在col2中不匹配。

两个集合都没有相同的类型,在两个集合中都有一个字段ID。

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

3 个答案:

答案 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);
}

答案 1 :(得分:1)

对于不同的收藏,您可以试试这个

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

答案 2 :(得分:0)

假设您的collection类型为string

var resultCol = new List<string>();

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