使用linq将1对多关系转换为查找

时间:2016-10-04 08:56:37

标签: c# linq lookup

在我的数据库中,我有一个定义了1对多关系的条目。

我只想通过设置关系获得一个简单的Lookup

简单示例:

汽车在同一个表中具有值(如其制造商和类型)以及在另一个表中定义的属性(如颜色,hp,引擎)。 (这只是一个从数据库的角度来看没有意义的例子。)

我想要的只是从中选择所有汽车。 Ford作为他们的属性查找但我不明白这一点。

Currentyl我有

dbContext.Cars
    .Where(c => c.Manufacturer == "Ford")
    .Select(c => new {
        c.Type,
        Attributes = c.Attributes.Select(a => new{
            a.Value
        })
    })
    .ToLookup(arg => arg.Attributes.Select(a => a.Value), arg => arg.Type);

但是这给出了一个合并的

的查找

我需要像

这样的查找
[500hp] : {Type1,Type2}
[300hp] : {Type3,Type6}
[green] : {Type3,Type7}
[blue] : {Type2,Type1}

1 个答案:

答案 0 :(得分:3)

我认为你需要的是SelectMany

dbContext.Cars
    .Where(c => c.Manufacturer == "Ford")
    .SelectMany(c => c.Attributes.Select(a =>new { c.Type, a.Value }))
    .ToLookup(arg => arg.Value, arg => arg.Type);