2009-01-22 139 views
90

我有一個表'lasttraces',其中包含以下字段。如何僅選擇LINQ中具有最高日期的記錄

Id, AccountId, Version, DownloadNo, Date 

的數據是這樣的:

28092|15240000|1.0.7.1782|2009040004731|2009-01-20 13:10:22.000 
28094|61615000|1.0.7.1782|2009040007696|2009-01-20 13:11:38.000 
28095|95317000|1.0.7.1782|2009040007695|2009-01-20 13:10:18.000 
28101|15240000|1.0.7.1782|2009040004740|2009-01-20 14:10:22.000 
28103|61615000|1.0.7.1782|2009040007690|2009-01-20 14:11:38.000 
28104|95317000|1.0.7.1782|2009040007710|2009-01-20 14:10:18.000 

我怎樣才能在LINQ to SQL,只有讓每一個帳戶ID(具有最高日)的最後lasttrace?

+0

實際上在你的例子中所有具有相同帳號的日誌都有完全相同的日期,那麼哪一個在這種情況下優先? – BlackTigerX 2009-01-22 20:05:15

回答

188

如果你只是想爲每個帳戶的最後一天,你會使用這樣的:

var q = from n in table 
     group n by n.AccountId into g 
     select new {AccountId = g.Key, Date = g.Max(t=>t.Date)}; 

如果你想整個紀錄:

var q = from n in table 
     group n by n.AccountId into g 
     select g.OrderByDescending(t=>t.Date).FirstOrDefault(); 
+0

hhaa。你在哪裏更快;) – 2009-01-22 19:39:33

+2

Oracle不支持這一點。如果查詢性能超出您的考慮範圍,則可以在執行查詢之前轉換表ToList。 – 2013-03-08 09:44:41

+4

如果您可以爲此發佈一個「方法鏈」解決方案,那將會很棒。 – Lijo 2013-05-28 12:07:44

4

這可能是這樣的:

var qry = from t in db.Lasttraces 
      group t by t.AccountId into g 
      orderby t.Date 
      select new { g.AccountId, Date = g.Max(e => e.Date) }; 
3

去一個簡單的方法來做到這一點: -

創建一個類來保存以下信息

  • 水平(數)
  • 網址(網站地址)

去存儲一個ArrayList對象上的站點列表。並按以下查詢執行,按Level降序排序。

var query = from MyClass object in objCollection 
    orderby object.Level descending 
    select object 

一旦我在降序排序集,我寫了下面的代碼來獲取當屬最上面一行

MyClass topObject = query.FirstRow<MyClass>() 

這工作就像魅力的對象。

31

這裏有一個簡單的方法來做到這一點

var lastPlayerControlCommand = this.ObjectContext.PlayerControlCommands 
           .Where(c => c.PlayerID == player.ID) 
           .OrderByDescending(t=>t.CreationTime) 
           .FirstOrDefault(); 

也可以看看這個偉大的LINQ的地方 - LINQ to SQL Samples

9

如果你想整個紀錄,這裏是一個lambda方式:

var q = _context 
      .lasttraces 
      .GroupBy(s => s.AccountId) 
      .Select(s => s.OrderByDescending(x => x.Date).FirstOrDefault()); 
相關問題