2010-05-03 58 views
7

我有一個簡單的LINQ to Enities表,查詢和使用日期字段選擇使用LINQ到實體

所以,我想這個代碼獲得最近的記錄最近的記錄有沒有其他辦法可以做到這一點? 非常感謝!

+0

按日期時間分組沒有意義。如果分辨率是毫秒,那麼你不可能有一個組中有多個項目。或者這真的是日期字段? – 2010-05-03 21:20:01

回答

0

所以答案是:

var query = 
    from alert in m_alerts 
    group alert by alert.Identifier 
      into g 
      select new 
      { 
     GroupIdentifier = g.Key, 
     UpdateDateTime = g.Max(p => p.UpdateDateTime) 
      }; 

這將返回最近的記錄。

+0

這將返回一個新對象{Key,Date} 有沒有辦法返回相同的「alert」對象? – Begemotya 2010-05-06 13:16:22

+0

我被卡在你的評論在這裏。在我的測試中, m也會得到{Key,Date},但是你已經標記爲已解決。你如何獲得警告對象? – Jacques 2017-02-14 12:34:38

4

如果沒有一個理由組,你可能只是切換您的查詢了一點:

IQueryable<Alert> alerts = GetAlerts(); 
IQueryable latestAlerts = alerts.OrderByDescending(a => a.UpdateDateTime); 
+3

這將在查詢時將整個數據庫加載到內存中... – 2010-05-03 21:09:05

+0

@BlueRaja - 實際上它不會執行任何操作。直到你對像.First()或.Take(10)這樣的latestAlerts做些什麼之後,纔會發生數據庫命中。 – 2010-05-03 21:18:09

+2

@hightechrider:因此,「當被查詢時」...大概,海報正在尋找一個完整的答案。 – 2010-05-03 21:19:42

0

應該

IQueryable<Alert> latestAlerts = 
    (from a in alerts 
    group a by a.UpdateDateTime into g 
    order by g.Key 
    select g).First(); 

GroupBy肯定是通過LINQ到支持-Entities

+0

它不工作,「按g.key排序」是「紅色」 - >「查詢正文必須以select子句或組子句結尾 – Begemotya 2010-05-04 12:54:27

+0

任何我需要通過2個字段」UpdateDateTime「和」Id「進行分組的方法爲了獲得每個ID的最近記錄 – Begemotya 2010-05-04 12:57:37

8

我有類似的需求。我想要返回類型化記錄,而不是新的匿名對象。要做到這一點.First()可以提供幫助。

var query = from alert in m_alerts 
     group alert by alert.Identifier into a 
     select a.OrderByDescending(g => g.UpdateDateTime).First(); 

使用OrderByDescending命令對它們進行排序,並使用First()將其排在第一位。你已經用你的標識符對它們進行了分組,所以你只應該得到每個標識符的最新記錄。

+1

不得不使用FirstOrDefault(),但是很好用。 – Joshua 2014-05-29 15:56:06