【问题标题】:LINQ to SQL, get most recent records for given IDLINQ to SQL,获取给定 ID 的最新记录
【发布时间】:2010-08-19 04:13:09
【问题描述】:

intHi,

对 LINQ 很陌生。

我有一个评分表。
用户为实体添加一组评级 每个用户可以为一个实体设置多个评级。

例如,假设实体是汽车。该车在外观和性能方面进行了评级。并且用户可以多次评价给定汽车的外观和性能。所以我的表看起来像这样(Rating 字段不是 Identity 列;它是一个 1 - 10 的整数):

ReviewID     UserID     EntityID     CatID     Rating    Body               DateSubmitted
1            3          6            1         7         "drives great"     8/01/2010 02:36:28 PM
2            3          6            2         8         "looks great"      8/01/2010 02:36:28 PM
3            3          6            1         2         "broke down"       8/18/2010 11:39:58 PM
4            3          6            2         1         "paint flaked off" 8/18/2010 11:39:58 PM

现在,我有一个辅助方法,我在其中提供 UserID 和 EntityID,并且我想返回最新的评级集(到包含评级类别的 ViewModel)。

public static IQueryable<RatingViewModel> GetRatingViewModel(int EntityID, int UserID)
    {
        DB _db = new DB();

        var a =

            from rating in _db.Ratings
            join ratingCat in _db.RatingCategories
                on rating.RatingCategoryID equals ratingCat.RatingCategoryID
            where rating.UserID == UserID
                && rating.EntityID == EntityID
            select new RatingViewModel
             {
                 Rater = rating.User,
                 RaterRating = rating,
                 RatingCategory = ratingCat

             };

        return a;
    }

我需要添加什么样的“位置”或“分组依据”或“排序依据”才能仅获取给定 UserID 和 EntityID 的最新评级集?

谢谢!

【问题讨论】:

    标签: c# linq-to-sql


    【解决方案1】:

    考虑在方法返回时按DateSubmitted 排序,然后获取您想要的条目数。

    var a = from rating in _db.Ratings
            join ratingCat in _db.RatingCategories
                on rating.RatingCategoryID equals ratingCat.RatingCategoryID
            where rating.UserID == UserID
                && rating.EntityID == EntityID
            orderby rating.DateSubmitted descending
    
            select new RatingViewModel
             {
                 Rater = rating.User,
                 RaterRating = rating,
                 RatingCategory = ratingCat
    
             }
             .Take(10);
    

    【讨论】:

    • 这行得通。如果我按照您所写的方式添加 .Take(10),则会收到一条错误消息,指出我的视图模型不包含“Take”的定义。但是我可以去掉 '.Take(10)' 然后只写 var b = a.Take(10);它完成了工作。
    【解决方案2】:
    .OrderByDescending(a => a.DateSubmitted).FirstOrDefault()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多