簡體   English   中英

c#Dynamic.Linq-groupby,然后按條件選擇

[英]c# Dynamic.Linq - groupby and then select by condition


我以為會很容易,但是我真的為此感到掙扎。

我有一個具有這種模式的表:
名稱,日期,值

這是我要達到的目標:

  1. 將所有行按“名稱”分組
  2. 從該組中選擇“日期”最大的“值”

#1可以通過GroupBy(“ Name”,“ it”)輕松實現,但是現在呢?
我如何查詢分組結果???

謝謝你們。

我從您的問題中得出的一個假設是“日期是最大的”,意思是每個日期都是最新的。

var data = new List<Data>
                             {
                                 new Data() {Name = "one3", Date = new DateTime(2001, 11, 11), Value = 7},
                                 new Data() {Name = "one2", Date = new DateTime(2001, 11, 11), Value = 111},
                                 new Data() {Name = "one2", Date = new DateTime(2011, 11, 11), Value = 7},
                             };

var result = data.GroupBy(x => x.Name).Select(grouping => grouping.OrderByDescending(x => x.Date).Take(1).FirstOrDefault()).ToList();

我確定可能有更好的方法來執行linq查詢,但我希望這至少可以為您指明正確的方向:-)

我假設對於每個名稱,您都希望具有該名稱的最新日期的記錄的值。 如果這是正確的,那么以下應該工作

from d in new[]
{
    new { Name = "x", Date = new DateTime(2000, 1, 1), Value = 1, },
    new { Name = "x", Date = new DateTime(2001, 1, 1), Value = 2, },
    new { Name = "y", Date = new DateTime(2000, 1, 1), Value = 3, },
}
    group d by d.Name into g
    let maxDate = g.Max(d => d.Date)
    select new { Name = g.Key, Date = maxDate, Value = g.Single(p => p.Date == maxDate).Value }

如果需要,我也將Date包含在結果中。

看到
http://www.albahari.com/nutshell/predicatebuilder.aspx

http://tomasp.net/blog/dynamic-linq-queries.aspx


更新

嘗試這個。 似乎對我有用:
我正在使用另一個答案中的數據。 希望這不會作弊...

var set = new[]
              {
                  new {Name = "x", Date = new DateTime(2000, 1, 1), Value = 1,},
                  new {Name = "x", Date = new DateTime(2001, 1, 1), Value = 2,},
                  new {Name = "y", Date = new DateTime(2000, 1, 1), Value = 3,},
              };

var query =
    from x in set
    orderby x.Date descending
    group x by x.Name
    into g
    select g.First();

Console.WriteLine(query.First().Date);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM