Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq分组并计数_C#_Linq - Fatal编程技术网

C# Linq分组并计数

C# Linq分组并计数,c#,linq,C#,Linq,我有以下表格数据: 上表数据插入的工作原理如下:- 我们现在有两种状态(1,2)。 创建条目时,其状态为1,并分配给id为1的用户。 当数据更新时,它的状态将为2,并且它可能被分配给多个用户,这里它被分配给用户2和3 我希望数据按状态按以下方式分组:- 每个id只应包含在单个状态下,并且应基于每个状态更新的最新日期获取。 这在林肯城怎么可能 编辑 以下是我能达到的目标 var result = (from el in this.logRepository.GetQuery(null)

我有以下表格数据:

上表数据插入的工作原理如下:- 我们现在有两种状态(1,2)。 创建条目时,其状态为1,并分配给id为1的用户。 当数据更新时,它的状态将为2,并且它可能被分配给多个用户,这里它被分配给用户2和3

我希望数据按状态按以下方式分组:-

每个id只应包含在单个状态下,并且应基于每个状态更新的最新日期获取。 这在林肯城怎么可能

编辑 以下是我能达到的目标

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

因此,您基本上希望获取每个用户的所有最后条目,按状态对其进行分组,并统计每个状态下的用户数。对吗?当然可能,你应该先自己试试。你能给我们看一下小代码吗?使用和是可能的,你的尝试到底有什么问题?