如何从2个不同的列表中提取找到以下表达式的所有元素

List1.id = List2.id && List1.CategoryId = list2.CategoryId


以及如何通过提取主列表中缺少的元素进行逆运算

!(List1.id = List2.id && List1.CategoryId = list2.CategoryId)

最佳答案

因此,第一种情况是您的基本Join操作,Linq支持此操作:

var matchingItems = from item1 in list1
            join item2 in list2
            on new{ item1.id, item1.CategoryId}
            equals new{ item2.id, item2.CategoryId}
            select new { item1, item2 };


对于第二种情况:

var idValues = list2.Select(item => new { item.id, item.CategoryId })
    .ToHashSet();
var missingItems = list1.Where(item => !idValues.Contains(new { item.id, item.CategoryId }));


这是ToHashSet的定义:

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

关于c# - Linq用于通过比较2个属性值从列表1中选择存在于列表2中的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14262341/

10-13 07:54