首先,两个集合应该包含相同类型的对象。
然后你可以执行以下操作:
var filteredPerosns = personEntities
.Where(p => personsOfInterest.Contains(p, new MyPersonComparer()));
创建类:
class MyPersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
return x.Job == y.Job && x.Name == y.Name;
}
public int GetHashCode(Person obj)
{
return obj.PersonID; //Just for example...
}
}
OR如果第一个不是一个选项,您可以按照以下方式进行连接(概念上):
List<int?> listA = new List<int?>() {1, 2, 3, 4, 5, 6, 7};
List<int?> listB = new List<int?>() {5};
bool result = (from a in listA
join b in listB on a equals b
select a).Any();
我不知道你的类的内部结构,所以你必须调整示例以适应你的对象结构。
EDITED:我修改了上面的示例以反映您编辑的描述:
List<Person> personsOfInterest = GetPersonsOfInterest();
var filteredPersons = (from a in personEntities
join b in personsOfInterest on new{a.Name, a.Job} equals new {b.Name, b.Job}
select a).ToList();
您代码中的 PersonEntities 是自定义集合类型还是 EF 模型中的表/复杂类型?