Не могу получить доступ к информации запроса на мой взгляд с анонимным типом - PullRequest
0 голосов
/ 28 декабря 2018

Ну, я сделал Linq Query, Top 5 из моей базы данных, я могу отправить этот запрос в представление, как и ожидалось, но когда я пытаюсь получить доступ к его полям, он говорит, что мой "объект" не имеет этих параметровДаже если я вижу, что они достигают цикла foreach, я показываю на изображении

My view

   @foreach (var item in ViewBag.TOPEMPRESASMAISPROCURADAS)
                {
                    <tr>
                        <td>@item.Nome</td>
                        <td>@item.Numero_Estagios</td>
                    </tr>
                }

мой контроллер:

 ViewBag.TOPEMPRESASMAISPROCURADAS = Empresas.Select(emp => new { emp.Nome, Numero_Estagios = Estagios
                .Where(x => x.Empresa.EmpresaID == emp.EmpresaID && x.AnoLetivo == AnoLetivo).Count() })
                .OrderBy(y => y.Numero_Estagios).Take(5);

ХорошоКак вы можете видеть, foreach получает элемент и его информацию, как и должно, но я не могу использовать item.Nome или item.NumeroEstagios, почему это так?Мне бы очень хотелось получить помощь, я новичок здесь.Спасибо

1 Ответ

0 голосов
/ 28 декабря 2018

Если вы собираетесь использовать шаблон Model -View-Controller, вы должны создать модель , которая представляет данные, которые вы хотите представить в представлении.Следует избегать ViewBag.

public class MyClass
{ 
  public <type> Nome { get; set; }
  public <type> Numero_Estagios { get; set; }
}

public class IndexVM
{
  public IEnumerable<MyClass> items { get; set; }
}

Тогда

var model = new IndexVM
{
  items = Empresas
    .Select(emp => new MyClass { 
        Nome = emp.Nome, 
        Numero_Estagios = Estagios.Where(x => x.Empresa.EmpresaID == emp.EmpresaID && x.AnoLetivo == AnoLetivo).Count() 
    })
    .OrderBy(y => y.Numero_Estagios)
    .Take(5)
    .ToList()
}

return View(model);

и по вашему мнению:

@model IndeVM

@foreach (var item in Model.Items)
{
  <tr>
    <td>@item.Nome</td>
    <td>@item.Numero_Estagios</td>
  </tr>
}
...