2010-08-19 61 views
0

intHi,LINQ to SQL,獲取給定ID的最新記錄

對於LINQ來說很新穎。

我有一個額定值表。
用戶添加一組實體的評分 可以爲每個用戶的實體設置多個評分。

例如,假設實體是一輛汽車。該車在外觀和性能上評分。用戶可以對給定車輛的外觀和性能進行多次評估。所以,我的表看起來像這樣(分級字段是不是一個標識列,它是對1的比例爲int - 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 

現在,我已經在那裏我提供用戶名一個輔助方法和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; 
    } 

什麼樣的「其中」或「按組」或「按順序」的我需要添加只搶到最新的一組評定爲給定的用戶名和ENTITYID的?

謝謝!

回答

0

考慮按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); 
+0

這工作,八九不離十。如果我在你寫的時候添加.Take(10),我會得到一個錯誤,說我的視圖模型沒有包含'Take'的定義。但是我可以放棄'.Take(10)',然後寫var b = a.Take(10);並完成工作。 – johnnycakes 2010-08-21 21:09:02

0
.OrderByDescending(a => a.DateSubmitted).FirstOrDefault()