c # лямбда-выражение ошибка ... этот словарь требует элемента модели типа - PullRequest
1 голос
/ 01 декабря 2011

Когда я меняю запрос, я получаю сообщение об ошибке.Не могли бы вы помочь?

    public ActionResult Index(int? id)
    {
        Models.MyProjectEntities entity = new Models.MyProjectEntities();

         // NORMAL QUERY, NO PROBLEM
         //var Messages = entity.Message.Where(x => x.Active);

         // JOINED QUERY, GENERATES ERROR
         var Messages = entity.Message.Join(entity.Categories, 
                            m => m.CategoriID,
                            k => k.CategoriID,
                            (m, k) => new { Message = m, Categories = k })
                            .Where(x => x.Message.Active);


        return View(Messages);
    }

Вот первая строка aspx файла

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MyProject.Models.Message>>" %>

Вот ошибка

The model item passed into the dictionary is of type 'System.Data.Objects.ObjectQuery`1[<>f__AnonymousType7`2[MyProject.Models.Message,MyProject.Models.Categories]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[MyProject.Models.Message]'.

Ответы [ 3 ]

2 голосов
/ 01 декабря 2011

Ваш вид объявлен как набор из Message с.
Вы пытаетесь передать ему набор анонимных типов.

Как ясно указывает на ошибку, она не подходит.

Вместо этого вы должны создать класс для хранения данных из объединения, а затем объявить представление как набор этого класса.
(Представления не могут легко использовать модели с анонимным типом)

0 голосов
/ 01 декабря 2011
public ActionResult Index(int? id)
{
    Models.MyProjectEntities entity = new Models.MyProjectEntities();

     // NORMAL QUERY, NO PROBLEM
     //var Messages = entity.Message.Where(x => x.Active);

     // JOINED QUERY, GENERATES ERROR
     var Messages = entity.Message.Join(entity.Categories, 
                        m => m.CategoriID,
                        k => k.CategoriID,
                        (m, k) => new { Message = m, Categories = k })
                        .Where(x => x.Message.Active)
                        .Select(x => x.Message);


    return View(Messages);
}

или, если вам нужны категории, вам следует изменить тип модели представлений

EDIT:

public ActionResult Index(int? id)
{
    Models.MyProjectEntities entity = new Models.MyProjectEntities();

     // NORMAL QUERY, NO PROBLEM
     //var Messages = entity.Message.Where(x => x.Active);

     // JOINED QUERY, GENERATES ERROR
     var Messages = entity.Message.Join(entity.Categories, 
                        m => m.CategoriID,
                        k => k.CategoriID,
                        (m, k) => new MessageWithCategories { Message = m, Categories = k })
                        .Where(x => x.Message.Active);


    return View(Messages);
}

и тип модели должен быть MessageWithCategories (этот класс должен быть создан)

0 голосов
/ 01 декабря 2011

Поскольку вы присоединяетесь к созданию анонимного типа, вам нужно сделать

var Messages = entity.Message.Join(entity.Categories, 
    m => m.CategoriID,
    k => k.CategoriID,
    (m, k) => new { Message = m, Categories = k })
    .Where(x => x.Message.Active)
    .Select(x => new Message { ... .. ..  } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...