簡體   English   中英

在Linq中使用Max分組:如何獲取最大值的完整數據集?

[英]Group in Linq with Max: How do I get the full data set of the max value?

到目前為止,我得到的是:

var a = from e in tcdb.timeclockevent
        group e by e.workerId into r
        select new { workerId = r.Key, Date = r.Max(d => d.timestamp) };

該查詢為我提供了每個workerId的最新“時間戳”(注意:workerId不是tcdb.timeclockevent的主鍵)。 所以它只給我兩個值,但我需要整個數據集

有人知道如何獲取每個workerId的最大時間戳的tcdb.timeclock的整個數據集嗎?

要么

有人知道如何獲取每個工人的最大日期數據集的ID嗎?

先感謝您 :)

您可以按timestamp排序r分組,然后選擇第一個

var a = from e in tcdb.timeclockevent
        group e by e.workerId into r
        select r.OrderByDescending(d => d.timestamp).FirstOrDefault();

有人知道如何獲取每個workerId的最大時間戳的tcdb.timeclock的整個數據集嗎?

好吧,簡單的查詢將是這樣的:

var queryA =
    from e in tcdb.timeclockevent
    group e by e.workerId into g
    let maxDate = g.Max(e => e.timestamp)
    select new { workerId = g.Key, events = g.Where(e => e.timestamp == maxDate) };

如果您不需要IQueryable<T>結果,並且由於沒有直接返回分組結果集的SQL構造,則可以嘗試以下查詢,該查詢使用另一種方法來過濾記錄中的每個workerId的最大時間戳記數據庫,然后在內存中進行分組:

var queryB = tcdb.timeclockevent
    .Where(e => !tcdb.timeclockevent.Any(e2 =>
        e2.workerId == e.workerId && e2.timestamp > e.timestamp))
    .AsEnumerable()
    .GroupBy(e => e.workerId);

您可以嘗試查看哪種數據效果更好。

暫無
暫無

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

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