2017-02-24 86 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值上匹配的值的集合。