我正在以IEnumerable的形式获取SQL外连接的结果,希望在LINQ中将它们转换为嵌套的类型化对象。从类似这样的结果开始:
[{id: 1, industryId: 1}, {id:1, industryId: 2}, {id:2, industryId: 1} etc..]
转换为如下格式:
list of Company [{id: 1, list of Industry{industryId: 1, 2}, {id: 2, list of Industry{industryId: 1}}]
我目前正在尝试使用GroupBy来解决问题:
Companies = flatDbRows
.GroupBy(
row => row.CompanyId,
(key, value) => new CompanyModel
{
CompanyId = value.First().CompanyId,
CompanyName = value.First().CompanyName,
Industries = value
.GroupBy(
row => new { row.IndustryId, row.Industry },
(k, v) => new IndustryModel() { IndustryId = k.IndustryId, Name = k.Industry }
)
.Where(x => x.IndustryId != 0)
.ToList(),
}).ToList();
}
但是,使用First()获取每个分组公司所拥有的值并不感觉很好,尤其是考虑到所有价值。是否有更合适的方式?Group join听起来更符合我的需求,但我不知道如何将其应用于单个列表。如果这样更容易,我可以使用查询语法而不是lambda。
我试图从以下模型转换(其中与公司相关的信息将为每个外部连接的行业结果重复):
public class CompanyFlatDbRowsModel
{
public int CompanyId { get; set; }
public string CompanyName { get; set; }
public int IndustryId{ get; set; }
public string Industry { get; set; }
}
转化为:
public class CompanyModel
{
public int CompanyId { get; set; }
public string CompanyName { get; set; }
public IEnumerable<IndustryModel> Industries { get; set; }
}