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

本文关键字:关系 转换 查找 linq 使用 | 更新日期: 2023-09-27 18:11:29

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

我只想要一个简单的Lookup通过集合关系(s)。

简单的例子:

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

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

目前我有

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}

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

我认为你需要的是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);