使用LINQ过滤嵌套集合并返回主对象

时间:2017-10-03 17:26:03

标签: c# linq

我有以下两个类(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,如果可能的话,我希望在一个数据库事务中完成查询)

2 个答案:

答案 0 :(得分:3)

person.Where(x => x.Id == 1 && CarsOwned.Any(c => carsFilter.Contains(y.Name)));

答案 1 :(得分:2)

您需要添加两个条件,一个用于id,另一个用于汽车。现在,您有一个列表,其中包含该人员应拥有的所有汽车。使用AllAny扩展方法的组合,您可以找到那些拥有carsFilter集合中所有汽车的人员:

var result=persons.Where(p => p.Id == 1 && carsFilter.All(c=>p.CarsOwned.Any(e => e.Name==c));