在我的.net Core 2.0 Razor Pages项目中,我声明了一个像这样的List,其中MyData是一个链接到Entity Framework数据集的模型:
public IList<MyData> MyData { get; set; }
为简单起见,我们假设我的数据如下:
ID | UserName | LogOn
1 | User1 | 25/03/2018 12:54
2 | User2 | 25/03/2018 09:43
3 | User1 | 24/03/2018 18:23
4 | User3 | 24/03/2018 08:16
5 | User2 | 23/03/2018 17:12
...等
然后在我的OnGet()方法中,我知道我可以查询这个以生成一个我可以循环的列表,如下所示:
IQueryable<MyData> MyDataIQ = from i in _context.MyData select i;
MyData = await MyDataIQ.ToListAsync();
如果我想返回一个按UserName分组的列表,该列表包含该UserName的所有出现次数,那么我的LINQ查询会是什么样的?
我试过这个:
IQueryable<MyData> MyDataIQ = from i in _context.MyData group i by i.UserName into grp select new {key = grp.Key, cnt = grp.Count()};
但这只是给我一个类型转换错误。
我有原始数据,我只想在以这种方式分组的视图中显示它。
我是Core 2.0和Linq的新手,所以任何帮助都会非常有用。
答案 0 :(得分:1)
您将MyDataIQ
声明为IQueryable<MyData>
,但您正在创建匿名类型的IQueryable。
这应该有效:
var MyDataIQ = from i in ctx.MyData group i by i.UserName into grp select new { key = grp.Key, cnt = grp.Count() };
foreach (var a in MyDataIQ)
{
Console.WriteLine($"{a.key} {a.cnt}");
}
结果:
User1 2
User2 2
User3 1
编辑:Ups,我看到Mike Hixson已在评论中回答。