2010-09-23 111 views
1

我最近開始使用LINQ to SQL,我有一個小複雜的查詢,我需要幫助。 我有一個表在我的數據庫稱爲MovieComment,有以下欄目:LINQ to SQL Group by C#問題

  • CommentID
  • 用戶名
  • MovieID
  • 評論
  • 時間戳

那麼,是什麼我想要做的是將MovieID上的評論分組並將其保存到名爲Movie的對象中,其中MovieID被保存在MovieID中後,並且Linq對象保存在Movie對象內的ObservableCollection中。

public class Movie 
{ 
    #region Member Variables 

    public int MovieID { get; set; } 
    public string Title { get; set; } 
    public string Content { get; set; } 
    public Uri Poster { get; set; } 
    public double Rating { get; set; } 
    public DateTime Timestamp { get; set; } 

    public ObservableCollection<MovieComment> Comments { get; set; } // Linq object: MovieComment 

    #endregion // Member Variables 
} 

我已經想出以下LINQ查詢在那裏我得到MovieID,但我真的不知道我應該怎麼着手得到所有其他數據的保持

public ObservableCollection<Movie> LoadMovieID(int _userID, int _limit) 
{ 
    ObservableCollection<Movie> movies = new ObservableCollection<Movie>(); 

    var query = (from mc in db.MovieComment 
      where mc.UserID == _userID 
      orderby mc.Timestamp descending 
      group mc by mc.MovieID into movie 
      select new 
      { 
       MovieID = movie.Key, 
      }).Take(_limit); 

    foreach (var row in query) 
    { 
     Movie movie = new Movie(); 
     movie.MovieID = row.MovieID; 

     // I want to get the following: 
     // movie.MovieComment = MovieComment-objects with the MovieID == row.MovieID 

     movies.Add(movie); 
    } 

    return movies; 
} 

這是甚至可能在一個單一的查詢?感謝所有幫助我能

回答

5

好了,你可以試試這個:

var query = (from mc in db.MovieComment 
     where mc.UserID == _userID 
     orderby mc.Timestamp descending 
     group mc by mc.MovieID).Take(_limit); 

這會給你一個IGrouping<MovieComment, string>(或任何你的類型),它應該讓你在沒有任何所有評論加班。就LINQ本身而言,這當然是可以的,但是在LINQ to SQL中它是否會做到你想要的,我不確定。

+0

+1 - 但我也建議你學會使用Lambda表達式而不是查詢語法,因爲你會發現使用更復雜的查詢要容易得多。 FYI相當於上面的lambda:var query = db.MovieComment.Where(mc => mc.UserID == _userID).OrderByDescending(mc => mc.Timestamp).GroupBy(mc => mc.MovieID).Take (_limit) – Dan 2010-09-23 20:10:41

+1

@Dan:相反,我發現查詢表達式對於複雜查詢很容易,而lambda表達式對於* simple *查詢更好。我同意OP應該學習lambda語法,但*以及*查詢表達式,而不是「而不是」。 – 2010-09-23 20:16:54

+0

我完全同意學習兩者很重要。我發現Lambda和Query語法之間的區別非常個人化。我傾向於在多行中佈局我的lambda表達式,這對我來說很合適。 – Dan 2010-09-23 20:27:12