Элемент модели, переданный в словарь, имеет тип .... {Models.App}, но я передал {Models.App, System.Double} - PullRequest
0 голосов
/ 29 июня 2011

У меня в контроллере есть запрос, который получает все приложения и включает их среднюю оценку из другой таблицы

var apps = from a in db.Apps
           let rating = a.Ratings.Average(r => r.Stars)
           select new { App = a, Rating = rating == null ? 0 : rating };

Затем я заказываю их в зависимости от того, какой фильтр передан из дома .... нетбольшое дело ....

switch (sortOrder)
        {
            case "Top desc":
                apps = apps.OrderByDescending(a => a.Rating);
                break;
            case "Newest":
                apps = apps.OrderBy(a => a.App.DateUpdated);
                break;
            case "Newest desc":
                apps = apps.OrderByDescending(a => a.App.DateUpdated);
                break;
            default:
                apps = apps.OrderBy(a => a.Rating);
                break;
        }

Затем верните его в представление

return View(apps.ToPagedList(pageIndex, pageSize));

Однако, на главной странице я получаю сообщение об ошибке, указывающее, что я передаю неправильный тип модели ItemЯ прохожу {Model.App, System.Double} (я предполагаю, что из-за того, как мой запрос добавляет среднее значение рейтинга ...... Как я могу получить среднее значение рейтинга, но отправить обратно соответствующий тип элемента модели. Спасибо!

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Не передавайте анонимные типы в ваших представлениях.Определите модели вида:

public class MyViewModel
{
    public App App { get; set; }
    public double Rating { get; set; }
}

, а затем:

var apps = 
    from a in db.Apps
    let rating = a.Ratings.Average(r => r.Stars)
    select new MyViewModel 
    { 
        App = a, 
        Rating = rating == null ? 0 : rating 
    };

, а затем строго введите вид этой модели вида.

@model PagedList.IPagedList<MarketplaceFinal.Models.MyViewModel>
0 голосов
/ 29 июня 2011

Поскольку вы создаете анонимный тип, есть два способа, которыми вы могли бы подойти к этому.Во-первых, вы должны изменить представление, ожидая модель типа dynamic, но я бы порекомендовал вам покончить с анонимным типом и создать новый класс, скажем AppWithRating, который выглядит так:1005 * Измените свой запрос linq на это:

var apps = from a in db.Apps
           let rating = a.Ratings.Average(r => r.Stars)
           select new AppWithRating { App = a, Rating = rating == null ? 0 : rating };

И, наконец, обновите свой просмотр, чтобы принять тип IEnumerable<AppWithRating>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...