我有以下两个类(DB对象):
class Person
{
public int Id;
public List<Car> CarsOwned;
}
class Car
{
public string Name;
}
我希望能够搜索ID为1的人并返回名称为ford&amp;的所有车辆。这个人拥有的法拉利。我想要返回person对象。
到目前为止我所拥有的:
List<string> carsFilter = new List<string>();
carsFilter.Add("Ford");
carsFilter.Add("Ferrari");
person.Where(x => x.Id == 1).CarsOwned.Where(y => carsFilter.Contains(y.Name));
如何返回person对象而不是Cars对象? (Person是IQueryable,如果可能的话,我希望在一个数据库事务中完成查询)
答案 0 :(得分:3)
person.Where(x => x.Id == 1 && CarsOwned.Any(c => carsFilter.Contains(y.Name)));
答案 1 :(得分:2)
您需要添加两个条件,一个用于id,另一个用于汽车。现在,您有一个列表,其中包含该人员应拥有的所有汽车。使用All
和Any
扩展方法的组合,您可以找到那些拥有carsFilter
集合中所有汽车的人员:
var result=persons.Where(p => p.Id == 1 && carsFilter.All(c=>p.CarsOwned.Any(e => e.Name==c));