【问题标题】:Retrieving data from a second table if it has a record with the Id from another table如果第二个表有一条带有来自另一个表的 Id 的记录,则从第二个表中检索数据
【发布时间】:2013-12-28 14:48:08
【问题描述】:

我有 2 个上下文表,如果 id 相等,我想从中选择数据。

我想使用 LINQ 的 fluent API 来做到这一点。

我想检查Movie 中的Id 是否等于MovieReview 中的MovieId,如果是,则显示来自MovieReviewReviewerName,以及来自MovieName

这些表格是:

public class MovieReview
{
    public int Id { get; set; }

    [Range(1,10)]
    [Required]
    public int Rating { get; set; }

    [Required]
    [StringLength(1024)]
    public string Body { get; set; }

    [Display(Name="User Name")]
    [DisplayFormat(NullDisplayText="anonymous")]
    public string ReviewerName { get; set; }
    public int MovieId { get; set; }


public class Movie
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Director { get; set; }
    public DateTime ReleaseDate { get; set; }
    public string Genre { get; set; }
    public virtual ICollection<MovieReview> Reviews { get; set; }
}

非常感谢任何帮助。

到目前为止,我什至不确定我是否关闭: 变种模型 = _db.电影 .Join(_db.Reviews, g => g.Id, u => u.MovieId, (g,u) => new { MovieReview = u, Movie = g}) .Where( (g => g.Movie 选择(r => 新的 AdminReviewListViewModels { Id = g.Id, 姓名 = g.姓名, 导演 = g.导演, ReleaseDate = g.ReleaseDate, 流派 = g.流派, CountOfReviews = g.Reviews.Count(), 用户名 = u.ReviewerName });

【问题讨论】:

  • 既然MovieICollection&lt;MovieReview&gt;,为什么还要匹配? movie.Reviews 不会让你们都关联MovieReviews 吗?
  • 您是在使用实体框架还是这只是您构建的一组 POCO?
  • 我正在使用实体框架是的,ICollection 只是为了收集评论,我在“Movie”中设置了 Id,在 MovieReview 中设置了 MovieId,以便将来我可以进行这种比较桌子之间。到目前为止我有: var model = _db.Movies .Join(_db.Reviews, g => g.Id, u => u.MovieId, (g,u) => new { MovieReview = u, Movie = g}) .Where( (g => g.Movie select (r => new AdminReviewListViewModels { Id = g.Id, Name = g.Name, Director = g.Director, ReleaseDate = g.ReleaseDate, Genre = g.Genre, CountOfReviews = g.Reviews.Count(), UserName = u.ReviewerName });

标签: c# linq


【解决方案1】:

如果您只需要一个包含 MovieName 和 ReviewerName 属性的匿名枚举,这应该可以。

using (var _db = new YourDbContext())
{
    var movies = _db.Movies;
    var movieReviews = _db.MovieReviews;

    var results = movies.Join(movieReviews, 
        m => m.Id,
        mr => mr.MovieId,
        (m, mr) => new { MovieName = m.Name, ReviewerName = mr.ReviewerName }).ToList();
}

【讨论】:

    【解决方案2】:

    你可以使用:

    context.Set<MovieReview>().Select(c=>new{c.ReviewerName, c.Movie.Name})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 2019-12-05
      相关资源
      最近更新 更多