LINQ to SQL跨关系查询

时间:2014-04-11 11:12:49

标签: c# asp.net .net linq

这让我很生气。我觉得它看起来很简单,但下面会返回一个包含我需要的实体的IEnumerable列表,而不仅仅是一个实体列表:

db.tblPeople.Where(p => p.id == id).Select(s => s.tblCars.Select(z => z.tblCarType)).ToList();

我的目的是检索与carType相关联的所有personId个实体的列表。

我认为它与最后一个嵌套select

有关

3 个答案:

答案 0 :(得分:3)

这样做是因为您希望返回多条记录:

 var result =   db.tblPeople
                  .Where(p => p.id == id)
                  .Select(s => s.tblCars
                  .SelectMany(z => z.tblCarType)).ToList();

答案 1 :(得分:2)

使用SelectManyIEnumerable<IEnumerable<CarType>>展平为IEnumerable<CarType>

var carTypes =
    db.tblPeople
      .Where(p => p.id == id)
      .SelectMany(s =>
          s.tblCars
           .Select(z => z.tblCarType))
      .ToList();

这可以从

转换而来
var carTypes =
    (from person in tblPeople
     from car in person.tblCar
     from carType in car.tblCarType
     where person.id == id
     select carType).ToList();

答案 2 :(得分:1)

这是你想要/需要的:

db.tblPeople.Where(p =&gt; p.id == id)。 SelectMany (s =&gt; s.tblCars.Select(z =&gt; z.tblCarType))。 ToList();