我知道在 SO 和其他地方有大量的LINQ嵌套查询示例,但这对我来说没有意义。如果有人能像我五岁一样解释这一点,我将不胜感激。这都是伪混淆,所以请耐心等待这个人为的例子。
我有一个具有这些的 EF 模型:
public class Car(){
public String Vin {get; private set;}
public string Type {get; private set;}
public List<Option> Options {get; set;}
}
public class Option(){
public string Name { get; set; }
}
我从存储库中获取了集合IQueryable<Car> cars
。
很简单。目标是:
- 列出所有汽车类型(比如“卡车”、“SUV”、“小型货车”等)
- 在这些类型中的每一个下,都有一个存在于该类型汽车上的选项名称的子列表。
- 在每个选项下,列出具有该选项且属于该类型的每辆汽车的 VIN。
所以列表看起来像:
- 卡车
- 拖车挂钩
- vin1
- 葡萄酒8
- 卡车螺母
- vin2
- VIN3
- vin4
- 枪架
- vin1
- 折叠后座
- vin2
- VIN3
- 拖车挂钩
- 小型货车
- 旋转座椅
- vin6
- DVD播放机
- vin6
- VIN10
- 折叠后座
- vin6
- VIN10
- 旋转座椅
- 越野车
- 折叠后座
- 葡萄酒9
- vin5
- 折叠后座
你可能明白了。我知道我可以按类型对汽车进行分组,如下所示:
from c in cars
group by c.Type into g
但我认为我需要做的是将结果分组Vin
并Option
分组为 Type。我也觉得我可能需要
cars.SelectMany(c => c.Options)
.Select(o => o.Name)
.Distinct();
获取唯一选项名称的列表,但我不确定 a)这是执行此操作的最有效方法以及 b)如何将其合并到我的分组查询中。我真的不明白如何编写嵌套分组查询来完成此操作 - 第一组是外部组还是内部组?
我对此的理解低于补救措施,所以请再次:像我五岁一样解释。
谢谢大家。