2017-02-24 118 views
0

,我有以下表中的数据:LINQ的组通过,并采取计数

table data

上表数据的插入是这样工作的: - 我们现在两个状态(1,2)。 创建条目时,其状态为1,并将其分配给ID为1的用户。 更新数据时,其状态为2,并且可能会将其分配给多个用户,在此处被分配给用户2和3

我希望将数据由状态进行分组,以下列方式: -

Result

每个ID只应只在一个单一的状态被遏制,并应根据每次状态更新的最新日期进行。 这是怎么可能在LINQ C#?

编辑 以下是我所能达到的。

var result = (from el in this.logRepository.GetQuery(null) 
        group el by el.statusinto grp 
        select new 
        { ID = grp.Key, Count = grp.Count()}).ToList(); 
+0

所以你基本上要通过状态,以便对每个用户的所有最后一个条目,这组,并计算每种状态的用户。对? – Tatranskymedved

+2

绝对**可能**,你应该先尝试自己 –

+0

你能告诉我们一点代码吗? –

回答

1

根据您的要求

每个ID只应只在一个单一的状态被遏制,而应根据每个状态更新

您首先需要将最新的拍摄日期通过Id基,由Status采取与最新日期的元件从每个分组,然后组的结果:

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

可以使用GroupBy方法得到你想要的功能。

GroupBy(foo => foo.Bar)结果为Dictionary,其中键值为foo.Bar,并且字典中每个条目的值都是foo.Bar值上匹配的值的集合。