2010-08-23 27 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);