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