На самом деле вам нужно материализовать результат, вызвав ToList()
в действии вашего контроллера перед установкой в ViewBag
или вернувшись назад из запроса, используя return View(model)
, чтобы запрос выполнялся и набор результатов заполнялся в памяти в List<T>
.
Итак, для вашего запроса linq:
var model = _context.HealthProfessionals.Include(p => p.HealthReviews)
.Select(x => new
{
HealthProfessional = x,
RatingAverage = x.HealthReviews.Any() ?
x.HealthReviews.Average(v => (v.Rating)) : 0
}).ToList();
Теперь либо передайте его обратно для просмотра при возврате, как:
return View(model);
или вы можете установить ViewBag.profRatings
и затем использовать его в поле зрения.
UPDATE:
вы можете создать ViewModel, специфичную для ваших требований к представлению, например:
public class HealthProfessionalVM
{
public HealthProfessional HealthProfessional { get; set; }
public int RatingAverage { get ;set; }
}
и затем заполните его в действии контроллера вместо создания анонимного объекта:
var vm = _context.HealthProfessionals.Include(p => p.HealthReviews)
.Select(x => new HealthProfessionalVM
{
HealthProfessional = x,
RatingAverage = x.HealthReviews.Any() ?
x.HealthReviews.Average(v => (v.Rating)) : 0
}).ToList();
return View(vm);
и теперь строго наберите ваш взгляд на IEnumerable<HealthProfessionalVM>
и итерируйте его как:
@model IEnumerable<HealthProfessionalVM>
foreach(var item in Model)
{
<p> @item.RatingAverage </p>
}
Надеюсь, это поможет.