2010-08-23 59 views
0

這一個應該很容易。LINQ to SQL給定ID的最新記錄集?

我有一個包含記錄的評論表。 這些列是EntityID,UserID,Body,DateModified。 用戶可以爲實體提交多個條目。 我想選擇每個用戶標識的給定實體的最新條目的所有評論。

所以該表可能是這樣的:

EntityID  UserID  Body  DateModified 
1   101  "hey" 8/22/2010 11:36:47 PM 
1   101  "dude" 8/11/2010 04:15:43 PM 
1   108  "brah" 8/21/2010 11:31:11 PM 
1   108  "sup?" 8/14/2010 10:00:00 PM 

我有這樣的事情:

var itemReviews = db.Reviews 
          .Where(x => x.EntityID == EntityID) 
          .OrderByDescending(x => x.DateSubmitted) 
          ; 

什麼我需要添加到只得到記錄最近ENTITYID ?

謝謝。

+0

你可以看看http://msdn.microsoft.com/en-us/vcsharp/aa336746 .aspx來了解更多關於不同的LINQ操作符的信息。 – 2010-08-23 05:09:04

回答

3

爲了得到一個最近期回顧:

var mostRecentReview = db.Reviews 
         .Where(x => x.EntityID == EntityID) 
         .OrderByDescending(x => x.DateSubmitted) 
         .First(); 

爲了獲取最新的審覈爲每個用戶:

var reviews = db.Reviews 
       .Where(x => x.EntityID == EntityID) 
       .GroupBy(x => x.UserID) 
       .Select(gr => new { 
        UserID = gr.Key, 
        MostRecentReview = gr.OrderByDescending(x => x.DateSubmitted) 
             .First() 
       }); 
+0

如果您不確定結果集中是否有任何項目,則可以使用FirstOrDefault()而不是First(),然後在沒有項目符合條件時返回null而不是異常。 – 2010-08-23 05:06:03

+0

第二部分得到了它。謝謝! – johnnycakes 2010-08-25 00:51:00

-1

如果你想一組項目的返回(SQL頂部/限制),可以使用Take

var itemReviews = db.Reviews 
        .Where(x => x.EntityID == EntityID) 
        .OrderByDescending(x => x.DateSubmitted) 
        .Take(4); 

如果你也想做一些分頁您可以使用Skip

var itemReviews = db.Reviews 
        .Where(x => x.EntityID == EntityID) 
        .OrderByDescending(x => x.DateSubmitted) 
        .Skip(pageNo *pageSize).Take(pageSize); 
+0

Downvote?有沒有解釋,以便我可以從任何錯誤中學習? – 2010-08-25 06:38:26

-1

您可以使用許多方法,方式之一是:

var mostRecentReview = db.Reviews 
        .Where(x => x.EntityID == EntityID).Max(x =>x.DateModified); 
相關問題