LINQ to SQL Group by C#问题

时间:2010-09-23 14:13:10

标签: c# linq-to-sql group-by

我最近开始使用LINQ to SQL,我有一个需要帮助的小复杂查询。 我的数据库中有一个名为MovieComment的表,其中包含以下列:

  • CommentID
  • 用户ID
  • 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 个答案:

答案 0 :(得分: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中做你想做的事情,我不确定。