2017-07-04 30 views
1

我在SQLServer中有表。
我有c#中的實體id列表。 (例如:50,70,120等)。
對於每個實體,我需要只取最大日期的行,並在其中取最大值row_id。實體列表,最大日期,最大值row_id

爲〔實施例:

entity  date_value  row_id 
50   30/06/2017  3000<br> 
75   30/04/2017  2900<br> 
50   30/06/2017  2890<br> 
50   30/05/2017  2500<br> 
50   30/06/2017  2100<br> 
75   30/03/2017  2000<br> 

這裏我需要只有2行:

50   30/06/2017  3000<br> 
75   30/04/2017  2900<br> 

並不適用於所有的實體在這個表中的行。

你能幫我嗎?

謝謝你。

+0

將實體框架或LINQ標記爲SQL或簡單的ADO.net是一個好主意 – Vladimir

回答

1

如果您在使用實體框架比:

using (var context = new YourAppConext) 
    { 
    var result = context.Table.GroupBy(x => x.entity).Select(y => y.OrderByDescending(z => z.date_value).ThenByDescending(t => t.row_id).FirstOrDefault()).ToList(); 
    } 

想法是有一個子集與同實體然後通過選擇我們扁平化的組,然後訂購一套,並採取與最大的日期和行ID的數據 - 在同一時間的情況下,錄音。

注意如果row_id是一個字符串,那麼它更復雜。

2

我認爲它可以幫助您

升序使用OrderBy(x => x.Col1).ThenBy(x => x.Col2)

或降序使用

OrderByDescending (x => x.Col1).ThenByDescending (x => x.Col2) 
1

您可以使用LINQ象下面這樣:

var res = from t in listName 
          group t by t.entity 
          into g 
          select new 
          { 
           entity = g.Key, 
           date_value = (from t2 in g select t2.date_value).Max(), 
           row_id = (from t3 in g select t3.row_id).Max(), 
          }; 
+0

最高日期並不一定是最大row_id。 –