Member 7992716 Ответов: 1

Проблема запроса LINQ MVC при передаче модели для просмотра


Я получаю ниже ошибка при вызове запросов LINQ присоединиться к

The model item passed into the dictionary is of type 'System.Linq.Enumerable+<JoinIterator>d__38`4[OnlineApplicationTest.Models.SubCategoryMaster,OnlineApplicationTest.Models.CategoryMaster,System.Int32,<>f__AnonymousType1`3[System.String,System.String,System.Int32]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[OnlineApplicationTest.Models.SubCategoryMaster]'.


Нет никакой колонки Категория в SubCategoryMaster таблица, однако она имеет только CategoryId присутствует.
Мне нужно, чтобы отобразить категории, чтобы отобразить на виду, а не категории.Поэтому я написал запрос LINQ, чтобы получить имя категории и передать результат для просмотра. Однако я получаю выше сообщение об ошибке. Любая помощь по этому вопросу будет оценена по достоинству. Заранее спасибо.

Что я уже пробовал:

Таблица CategoryMaster
CategoryId
Категория и т. д

Таблица SubCategoryMaster
SubCategoryId
CategoryId
Имя_подкатегории


OnlineTestEntities2 objOnlineTest = new OnlineTestEntities2();
            
            List<SubCategoryMaster> Subcategories = objOnlineTest.SubCategoryMasters.ToList();
            List<CategoryMaster> categories = objOnlineTest.CategoryMasters.ToList();

            //var innerJoin = new List<SubCategoryMaster>();
            var innerJoin = (from s in Subcategories // outer sequence
                            join st in categories //inner sequence 
                            on s.CategoryId equals st.CategoryId // key selector 
                            select new
                            { // result selector 
                                SubCategoryName = s.SubCategoryName,
                                CategoryName = st.CategoryName,
                                SubCategoryId=s.SubCategoryId
                            }).AsEnumerable(); 
                       
            // d.AddRange(innerJoin);
            return View(innerJoin);



SubCategoryView как показано ниже

@model IEnumerable<OnlineApplicationTest.Models.SubCategoryMaster>

@{
    ViewBag.Title = "GetAllSubCategory";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>GetAllSubCategory</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.CategoryId)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.SubCategoryName)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CategoryId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.SubCategoryName)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.SubCategoryId }) |
            @Html.ActionLink("Details", "Details", new { id=item.SubCategoryId }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.SubCategoryId })
        </td>
    </tr>
}

</table>

1 Ответов

Рейтинг:
2

F-ES Sitecore

Вы делаете выбор

new { .... }


в качестве возвращаемого типа в вашем запросе linq. Это создает коллекцию анонимных типов, но вашему представлению требуется коллекция объектов SubCategoryMaster. Вам нужно изменить свой LINQ из "выбрать новый" для

var innerJoin = (from s in Subcategories // outer sequence
                            join st in categories //inner sequence 
                            on s.CategoryId equals st.CategoryId // key selector 
                            select new SubCategoryMaster
                            { // map the properties from your query to
                              // properties of SubCategoryMaster
                            }).AsEnumerable();


Member 7992716

Спасибо за ответ. Я пробовал этот вариант, но не повезло, что он не работает такая же ошибка приходит