【问题标题】:LINQ to SQL most recent set of records for a given ID?LINQ to SQL 给定 ID 的最新记录集?
【发布时间】:2010-08-23 04:51:16
【问题描述】:

这个应该很简单。

我有一个带有记录的评论表。 这些列是 EntityID、UserID、Body、DateModified。 一个用户可以为一个实体提交多个条目。 我想为每个 UserID 选择给定实体的最新条目的所有评论。

所以表格可能如下所示:

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 的记录?

谢谢。

【问题讨论】:

标签: c# linq-to-sql


【解决方案1】:

为了获得最新的评论:

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()
                });

【讨论】:

  • 如果您不确定结果集中有任何项目,您可以使用 FirstOrDefault() 而不是 First(),然后当没有项目符合条件时,您将返回 null 而不是异常。
  • 第二部搞定了。谢谢!
【解决方案2】:

如果您想要返回一组项目(sql top/limit),您可以使用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);

【讨论】:

  • 投反对票?是否有解释让我可以从任何错误中吸取教训?
【解决方案3】:

您可以使用多种方式,其中一种方式是:

var mostRecentReview = db.Reviews
                     .Where(x => x.EntityID == EntityID).Max(x =>x.DateModified);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多