首页 > 解决方案 > EF Core 检索按列中的值分组的行

问题描述

例如,让我们看一个这样的表(数据必须在一个表中):

在此处输入图像描述

我想得到这样的结果 JSON:

[
    {
        "manufacturer" : "VW",
        "cars" : [
            {
                "id" : 1,
                "model" : "Golf"
            },
            {
                "id" : 3,
                "model" : "Passat"
            },
            {
                "id" : 6,
                "model" : "Polo"
            }
        ]
    },
    {
        "manufacturer" : "Renault",
        "cars" : [
            {
                "id" : 2,
                "model" : "Laguna"
            },
            {
                "id" : 5,
                "model" : "Clio"
            }
        ]
    },
    {
        "manufacturer" : "Ford",
        "cars" : [
            {
                "id" : 4,
                "model" : "Fiesta"
            }
    }
]

问题是,当我尝试在不同的列表中获取制造商,然后使用 foreach 循环获取数据时,我收到有关数据读取器已打开的错误。

var manufacturers = _context.Cars.Select(s=> s.Manufacturer).Distinct();

foreach(var m in manufacturers)
{
   var sublist = _context.Cars.Where(q=> String.Equals(q.Manufacturer, m).ToList();
   // Add sublist to the specified models field (list)
}

我有一个模型,其中包含制造商字段和汽车列表。

标签: c#linqlambdaef-core-3.0

解决方案


您可以尝试以下方法,

var result = _context.Cars.GroupBy(x => x.Manufacturer).Select(x => new { manufacturer = x.Key, cars = x.Select(y => new { id = y.Id, model = y.Model }).ToList() }).ToList();
var json = JsonConvert.SerializeObject(result);

PS:您可以在只读场景中使用 AsNoTracking() 以获得更好的性能,例如

_context.Cars.AsNoTracking()...

欲了解更多详情,请访问此处


推荐阅读