[英]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.