【发布时间】:2019-06-28 09:28:07
【问题描述】:
我很难将 dbset (EntityFramework) 按两个字段分组并将该输出发送到强类型视图。
当我为复合键使用匿名类型时,我得到了正确的输出。包含一个项目的列表,而该项目又具有两个或多个分组项目。
现在,如果我改用一个类,我会得到一个包含两个项目的列表,然后每个项目都有一个分组项目。
var output = context.Transfers.GroupBy(t=> new { t.TNumber, t.Type}).ToList();
var output2 = context.Transfers.AsEnumerable()
.GroupBy(t => new OTSpecs(t.TNumber, t.Type)).ToList();
OTSpecs 只是一个简单的类,具有这些公共字段和一个参数构造函数。
我需要添加 AsEnumerable() 否则我会得到 System.NotSupportedException 在 LINQ to Entities 中仅支持无参数构造函数和初始化程序
也是因为我需要像这样在视图中定义模型
@model IEnumerable<IGrouping<OTSpecs, Transfer>>
除非当然可以用匿名类型替换该行中的 OTSpecs。但我不知道怎么做。
我的问题是为什么这些代码行会产生不同的输出? 是否可以在视图中定义模型来替换匿名类型的 OTSpecs?
【问题讨论】:
-
context.Transfers 是一个数据表。要枚举行,您需要添加“AsEnumerable()。当您有一个类时,您需要该类的 List() 对象,例如: List
specs = new List(); 然后您应该能够使用: specs.Group(t => new { t.TNumber, t.Type}).ToList();
标签: c# asp.net-mvc linq group-by