簡體   English   中英

Linq用子查詢分組

[英]Linq group by with a sub query

我有一個包含以下三個屬性的對象:ID,DATE和NAME,並希望使用linq查詢它,產生的結果與下面的sql語句中編寫的結果相同。

SELECT ID, MAX(DATE), NAME 
FROM TABLE
GROUP BY ID

到目前為止,這是我對linq的了解:

var grouped = from a in table
group a by a.ID into g
select new fooObject()
{
DATE= g.Max(a => a.DATE),
NAME= g.Select(a => a.Name).ToString(),
ID= g.Select(a => a.ID)
};

在此先感謝您的幫助。

根據您的最新解釋,這是我建議的解決方案。 我也整理了一下代碼。

var grouped = from item in table
              group item by item.Id into g
              let itemMaxDate = g.MaxBy(i => i.Date)
              select new FooObject()
              {
                  Id = g.Key,
                  Name = itemMaxDate.Name,
                  Date = itemMaxDate.Date
              };

然后,您需要定義MaxBy擴展方法。 (不幸的是,LINQ確實包含一個內置的。)

public static TSource MaxBy<TSource, TResult>(this IEnumerable<TSource> 
    collection, Func<TSource, TResult> func)
{
    var comparer = Comparer<TResult>.Default;
    TSource maxItem = null;
    foreach (var item in collection)
    {
        if (comparer.Compare(item, maxItem) > 0)
            maxItem = item;
    }
    return maxItem;
}

我相信這應該是您現在想要的。 讓我知道它是否對您有用。

var grouped = (from a in table
               where a.Date == (from d in table where a.ID == d.ID select Date).Max()
               select a).OrderBy(i => i.ID);
SELECT ID, MAX(DATE), NAME
FROM TABLE
GROUP BY ID

選擇列表中的“ TABLE.NAME”列無效,因為它既不包含在聚合函數中,也不包含在GROUP BY子句中。

暫無
暫無

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

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