繁体   English   中英

左使用LINQ加入前1名

[英]Left Join to top 1 using LINQ to entites

我有一个实体列表,每个实体都有0> n个相关评论。 如果每个实体都存在一个评论,我想加入最新评论。 然后,我想返回以下最新评论的状态,但是无法通过CreatedDate Descending将lstReviews过滤到前1个。

 var lstMainEntity = this.service.GetAllMainEntities();
 var lstReviews = this.service.GetReviews();

 var lst = from e in lstMainEntity 
           from review in lstReviews.Where(r => r.EntityID == e.EntityID).DefaultIfEmpty()   
  select new 
  {
      ID = e.EntityID,
      ReviewStatus = review != null ? review.IsComplete ? "Complete" : "Active"
  }

我怎样才能做到最好?

我假设lstMainEntitylstReviewsIQueryable<..> 如果它们是IEnumerable<..> ,则必须在ReviewStatus赋值中进行空检查。 (如果它是IQueryable性能应该更快)

  var lst = from e in lstMainEntity 
            let review = lstReviews.Where(r => r.EntityID == e.EntityID)
                                   .OrderByDescending(r => r.CreatedDate)
                                   .FirstOrDefault()
  select new 
  {
      ID = e.EntityID,
      ReviewStatus = review.IsComplete ? "Complete" : "Active"
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM