在里面net如果我有2个列表
ListA {ID : 1, Value : "foo"}, {ID : 2, Value : "bar"}, {ID : 3, Value : "zoo"} ListB {ID : 1, ListA_Id : 1, Value "bar"}, {ID : 2, ListA_Id : 3, Value "zoo"}, {ID : 3, ListA_Id : 4, Value "foo"}
如果要在列表B中搜索ListA\u Id字段与列表A中Id匹配的所有元素,可以执行以下操作:
ListB.Where(x => listA.ID.Contains(x.ListA_Id)).ToList()
但如果我想确保ListA中的两个值都与ListB匹配呢?
e、 g级 ListA.Id == ListB.ListA_Id && ListA.Value = ListB.Value
ListA.Id == ListB.ListA_Id && ListA.Value = ListB.Value
在上述示例中,ListA中的第三个元素将与listB中的第二个元素匹配
您可以使用 Any 扩展方法,并将您的条件指定为谓词:
Any
listB.Where(b => listA.Any(a => a.ID == b.ListA_Id && a.Value == b.Value)).ToList();
这只适用于列表包含少量元素的情况。随着列表变大,这将以指数形式变慢,因为您可能最终会检查 listA 对于 listB .在这种情况下,可能值得转换 listA公司 进入字典以更快地查找:
listA
listB
listA公司
var dictA = listA.ToDictionary(a => a.ID); var result = listB .Where(b => dictA.TryGetValue(b.ListA_Id, out var a) && a.Value == b.Value)) .ToList();