c# - 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)
}
我有一个模型,其中包含制造商字段和汽车列表。
解决方案
您可以尝试以下方法,
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()...
欲了解更多详情,请访问此处
推荐阅读
- scala - 为什么隐式转换不会引发编译时错误?
- ios - 如何使用 Swift 在相机(SCNNode)图像跟踪上播放视频
- google-apps-script - 保存为 CSV 时,Utilities.formatDate 正在更改我的电子表格中的日期格式 - Google 表格/Google Apps 脚本
- javascript - React 中的 HashRouter 问题无法修复
- java - 如何将动态 JSON 解析为 JavaBean
- spring - 弹簧拦截器
- python - Python求解线性方程的子集
- typescript - 财产 '
' 导出的接口有或正在使用私有名称 ' ' - c# - 断开蓝牙设备C#
- reactjs - React - 带有弹出窗口和选项卡的传单 MarkerCluster