【问题标题】:LINQ IQueryable with group by and countLINQ IQueryable 与 group by 和 count
【发布时间】:2018-03-27 21:00:25
【问题描述】:

在我的 .net Core 2.0 Razor Pages 项目中,我声明了一个这样的列表,其中 MyData 是链接到实体框架数据集的模型:

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();

如果我想返回一个按用户名分组的列表,其中包含该用户名的所有出现次数,我的 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 的新手,所以任何帮助都会非常有用。

【问题讨论】:

  • 您拥有的语句的返回类型不会是 'IQueryable'。它将是一个`IEnumerable'。尝试用 'var' 替换 'IQueryable'。

标签: c# entity-framework linq asp.net-core


【解决方案1】:

您将 MyDataIQ 声明为 IQueryable&lt;MyData&gt;,但您正在创建匿名类型的 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 已经在评论中回答了。

【讨论】:

    猜你喜欢
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 2022-08-18
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多