下面的查询可以满足我的需求,但是当两个列表包含多个项目(> 30万)时,它会非常慢。
基本上,它会返回列表2中没有列表1中的文档的所有人。
personList1.Add(person1);
personList1.Add(person2);
personList2.Add(person2);
personList2.Add(person3);
var result = personList2
.Where(p2 => p2.documents
.Exists(d2 => !personList1
.Exists(p1 => p1.documents
.Contains(d2)
)
)
).ToList();
result.ForEach(r => Console.WriteLine(r.name));
//Should return person3 name
类
public class Person
{
public string name { get; set; }
public List<IdentificationDocument> documents { get; set; }
public Person()
{
documents = new List<IdentificationDocument>();
}
}
public class IdentificationDocument
{
public string number { get; set; }
}
完整代码
https://dotnetfiddle.net/gS57gV
任何人都知道如何提高查询性能?谢谢!
答案 0 :(得分:2)
将所有相关数据放入首先进行查找的结构中:
var lookup = new HashSet<string>(personList1.SelectMany(p => p.documents).Select(d => d.number));
var result = personList1.Where(p => !p.documents.Select(d => d.number).Any(lookup.Contains));