转换为Linq(lambda表达式)-仅选择一个带有联接的表

时间:2018-09-28 18:45:03

标签: c# linq

我想在lambda中使用linq我只想选择一个连接表 像

select r* from report r left join favorites f on f.reportid = r.reportid

这是我现在拥有的,我想将结果分配给模型对象

List<Report> reports = new List<Report>(db.UserFavorites
                                        .Join(db.Reports, fav => fav.ReportID, rep => rep.Report_ID,((fav,rep) => new Report (rep)))
                                         .Where(x => x.Favorites.UserID == new Guid(userID))
                                         .Select new { rep }
                                         .ToList()
                                        );
return reports;

我正在为选择做准备。结果将变为匿名还是将保留Report对象?

1 个答案:

答案 0 :(得分:1)

  1. ToList已经返回一个列表,无需通过调用new List<Report>重新复制它。
  2. rep属于Report类型,因此只需执行(fav, rep) => rep而不是创建新的Report实例。
  3. 您选择的部分甚至没有编译,就像我在第2点中提到的那样,您只返回rep,即Select(rep => rep)。但是,如果您返回输入,则可以完全省略“选择”。

总共应该是这样的:

List<Report> reports = db.UserFavorites
  .Join(db.Reports, fav => fav.ReportID, rep => rep.Report_ID, (fav, rep) => rep)
  .Where(x => x.Favorites.UserID == new Guid(userID))
  .ToList();
return reports;