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;
}
這是甚至可能在一個單一的查詢?感謝所有幫助我能
+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
@Dan:相反,我發現查詢表達式對於複雜查詢很容易,而lambda表達式對於* simple *查詢更好。我同意OP應該學習lambda語法,但*以及*查詢表達式,而不是「而不是」。 – 2010-09-23 20:16:54
我完全同意學習兩者很重要。我發現Lambda和Query語法之間的區別非常個人化。我傾向於在多行中佈局我的lambda表達式,這對我來說很合適。 – Dan 2010-09-23 20:27:12