Представления моделей MVC

Используя структуру Entity, у меня есть сущность Account (идентификатор, имя) и сущность AccountEntry (id, AccountID, Entry).

Мне нужна сводная страница, на которой показаны все учетные записи в учетной записи вместе с их соответствующими балансами (сумма записи для идентификатора учетной записи). Я попытался поместить значения в ViewBag, но он просто выдает ошибку, когда пытается использовать его в представлении. Есть ли элегантный способ отправить эту информацию в представление?

Вот что я пробовал:

КОНТРОЛЛЕР:

        ViewBag.Accounts = db.Accounts.Select(x => new
        {
            id = x.Id.ToString(),
            Account = x.Name,
            Balance = db.AccountEntries.AsEnumerable().Where(y => y.AccountID == x.Id).Select(y => y.Amount).DefaultIfEmpty(0).Sum()
        }).ToList();

ПОСМОТРЕТЬ:

@foreach (var item in ViewBag.Accounts)
{
    <tr>
        <td>
            @item.Account
        </td>
        <td>
            @item.Balance
        </td>
        <td>
        </td>
    </tr>
}

Но представление выдает ошибку: Дополнительная информация: «объект» не содержит определения для «Учетной записи», хотя отладка показывает, что у него есть значение.

Какова наилучшая практика для этого? Я использую модель?

И как лучше всего, если я, помимо счетов, хочу отправить и другие списки сводной информации?

EDITED: Это хорошая модель просмотра для вышеперечисленного?

Это хорошая модель просмотра?

public class SummaryModel
{
    public class AccountSummary
    {
        public Account account { get; set; }
        public decimal Balance { get; set; }
    }
    public IEnumerable<AccountSummary> AccountSummaries { get; set; }
}

person CapIsland    schedule 18.03.2015    source источник
comment
Вам определенно следует использовать модель (в частности, модель представления), а не ViewBag. Вам следует избегать использования ViewBag, насколько это возможно.   -  person mason    schedule 18.03.2015
comment
Анонимные объекты создаются компилятором как внутренние. Представления Razor автоматически компилируются в отдельную сборку средой выполнения ASP.NET. Это означает, что вы не можете получить доступ ни к каким анонимным объектам, сгенерированным в ваших контроллерах. Определите ViewModel   -  person Venkata Krishna    schedule 18.03.2015
comment
А, это объясняет ошибку. Итак, как мне это сделать без анонимных объектов? Должен ли я определять класс?   -  person CapIsland    schedule 18.03.2015
comment
Мне было интересно, стоит ли просто поместить код для SUM в частичный класс, добавляющий к сущности Account, но это означает отправку dbContext, и это не кажется элегантным. Я не хотел создавать совершенно новый класс для Account только для того, чтобы содержать SUM.   -  person CapIsland    schedule 18.03.2015
comment
Хорошо, я разобрался с моделью. Спасибо всем за помощь.   -  person CapIsland    schedule 19.03.2015