C# Linq分组并计数
我有以下表格数据: 上表数据插入的工作原理如下:- 我们现在有两种状态(1,2)。 创建条目时,其状态为1,并分配给id为1的用户。 当数据更新时,它的状态将为2,并且它可能被分配给多个用户,这里它被分配给用户2和3 我希望数据按状态按以下方式分组:- 每个id只应包含在单个状态下,并且应基于每个状态更新的最新日期获取。 这在林肯城怎么可能 编辑 以下是我能达到的目标C# Linq分组并计数,c#,linq,C#,Linq,我有以下表格数据: 上表数据插入的工作原理如下:- 我们现在有两种状态(1,2)。 创建条目时,其状态为1,并分配给id为1的用户。 当数据更新时,它的状态将为2,并且它可能被分配给多个用户,这里它被分配给用户2和3 我希望数据按状态按以下方式分组:- 每个id只应包含在单个状态下,并且应基于每个状态更新的最新日期获取。 这在林肯城怎么可能 编辑 以下是我能达到的目标 var result = (from el in this.logRepository.GetQuery(null)
var result = (from el in this.logRepository.GetQuery(null)
group el by el.statusinto grp
select new
{ ID = grp.Key, Count = grp.Count()}).ToList();
您可以使用
GroupBy
方法获得所需的功能
GroupBy(foo=>foo.Bar)
生成一个字典,其中键是foo.Bar
中的值,字典中每个条目的值是foo.Bar
值上匹配的任何值的集合。根据您的要求
每个id只应包含在一个状态下,并且应基于每个状态更新的最新日期获取
您需要首先根据Id
进行分组,从每个分组中获取具有最新日期的元素,然后根据状态对结果进行分组:
var query =
from e in (from e in this.logRepository.GetQuery(null)
group e by e.Id into g
select g.OrderByDescending(e => e.Date).FirstOrDefault())
group e by e.Status into g
select new { Status = g.Key, Count = g.Count() };
或者
var query =
from e in this.logRepository.GetQuery(null)
group e by e.Id into g
from e in g.OrderByDescending(e => e.Date).Take(1)
group e by e.Status into g
select new { Status = g.Key, Count = g.Count() };
因此,您基本上希望获取每个用户的所有最后条目,按状态对其进行分组,并统计每个状态下的用户数。对吗?当然可能,你应该先自己试试。你能给我们看一下小代码吗?使用和是可能的,你的尝试到底有什么问题?