【发布时间】:2017-09-10 23:57:48
【问题描述】:
基本上,我是从某个表中获取所有记录,然后选择一个新的 VM 类。我想出了这个代码来计算平均评分,但是,代码产生了正确的平均值(按获取的对象的 ID 分组)。问题是,这些平均值/值采用IQueryable 的形式,而我需要将它们分别分配给相应的记录。
return _ctx.LodgingDbSet.Select(x => new LodgingVM
{
LodgingId = x.Id,
LodgingName = x.Name,
LodgingAddress = x.Address,
LodgingEmail = x.Email,
LodgingPhone = x.Phone,
LodgingAverageRating = _ctx.RatingDbSet.GroupBy(
g => g.Reservation.Unit.LodgingId, r => r.Score)
.Select(g => new
{
LodgingId = g.Key,
Score = g.Average()
}).Select(g => g.Score),
LodgingImage = x.Image,
LodgingImageThumb = x.ImageThumb
}).OrderBy(o => o.LodgingName).ToList();
VM 属性LodgingAverageRating 应该只包含该特定住宿的平均值。目前,我用于计算平均值的代码会返回所有计算出来的平均值。
【问题讨论】:
-
_ctx.RatingDbSet.Where(r => r.Reservation.Unit.LodgingId == x.Id).GroupBy(.....试试这个.. -
@ChetanRanpariya 是的,因为涉及到正确的过滤,现在我得到了一个结果,可以根据需要得到一个结果,并且可以在最后使用 FirstOrDefault() 。请为此提议创建一个答案,以便我接受。