powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Явная конструкция объекта типа ... в запросе не поддерживается.
20 сообщений из 20, страница 1 из 1
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36924233
Kane_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди добрые помогите, я уже замучался, при попытке запуска выкидывает :
Явная конструкция объекта типа "Linq_Aticles.Models.Category" в запросе не поддерживается.

Код такой:
В модели
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        public IEnumerable<Category> Get_category_list(int Id) 
        {
            return (from a in Category_table
                    where (a.ParentId == Id)
                    select new Category
                    {
                        Id = a.Id, 
                        NameCategory = a.NameCategory, 
                        DateCreateCategory = a.DateCreateCategory, 
                        ParentId = a.ParentId 
                    }).ToList();
        }
В контроллере
Код: plaintext
1.
2.
3.
4.
5.
        public ActionResult List(int? Id)
        {
            int _id = Id ?? 0;
            Main_Linq_Aticles mla = new Main_Linq_Aticles();
            return View(mla.Get_category_list(_id));
        }
В представлении
Код: plaintext
1.
2.
3.
4.
    <%foreach (var item in Model)
      { %>
      <%=item.NameCategory  %>
    ... ( и т. д )
    <%} %>
Помогите решить проблему, весь интернет облазил ничего конкретного, буду премного благодарен, помогите пожалуйста, я деньгами отблагодарю, только помогите плиз!!!! В чем трабла не пойму, замучался чес слово.
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36924374
VitaliyBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kane_sql,

Первую строку представления покажите.
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36924483
Kane_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конечно вот:
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Linq_Aticles.Models.Category>>" %>

Но мне кажется это не изза этого, при ошибке ide указывает на модель, в частности метод toList()

Еще есть пример в книжке "Стивен Сандерсон - ASP .NET MVC Framework с примерами на C#"
Создал пример из нее.

Вот полный код примера:
Контроллер:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
namespace WebApp.Controllers
{
    public class ProductsController : Controller
    {
        private I_Product_Repository i_pr_rep;
        public ProductsController( ) 
        {
            i_pr_rep = new Sql_product_repository();
        }
        public ViewResult List() 
        {
            //var pr = (from a in i_pr_rep.Products where a.Name == "Kayak" select new Product { Name = a.Name, Description = a.Description, Category = a.Category, Price = a.Price }).ToList();
            return View(i_pr_rep.Products.Where(a=>a.Name == "Kayak").ToList());
        }

    }
}
Класс таблицы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
namespace WebApp.Models
{
    [Table(Name="Products")]
    public class Product
    {
        [Column(IsPrimaryKey=true,IsDbGenerated=true, AutoSync=AutoSync.OnInsert)]
        public int ProductId { get; set; }
        [Column]
        public string Name { get; set; }
        [Column]
        public string Description { get; set; }
        [Column]
        public decimal Price { get; set; }
        [Column]
        public string Category { get; set; }
    }
}
Интерфейс для репозитария:
Код: plaintext
1.
2.
3.
4.
5.
6.
namespace WebApp.Models
{
    public interface I_Product_Repository
    {
        IQueryable<Product> Products { get; }
    }
}
Репозитарий:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
namespace WebApp.Models
{
    public class Sql_product_repository : I_Product_Repository
    {
        private string string_to_connect = WebConfigurationManager.ConnectionStrings["Sql_base"].ConnectionString;
        private Table<Product> pr_table;
        public Sql_product_repository() 
        {  
            pr_table = new DataContext(string_to_connect).GetTable<Product>();
        }
        public IQueryable<Product> Products 
        {
            get { return pr_table; }
        }
    }
}
И само представление
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<WebApp.Models.Product>>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
	Products
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <% foreach (var product in Model){ %>
    
    <%=product.Name  %>
    <%=product.Description %>
    <%=product.Price.ToString("c") %>
    
    <%} %>

</asp:Content>
-------------------------------------------------------------
И кажется отыскал то место где лежит проблема ( во всяком случае в примере по книжке ):

Почему-то такая запись в контроллере выдает ошибку:
Код: plaintext
1.
2.
3.
        public ViewResult List() 
        {
            return View((from a in i_pr_rep.Products where a.Name == "Kayak" select new Product { Name = a.Name, Description = a.Description, Category = a.Category, Price = a.Price }).ToList());
        }
А через лямбда методы работает все на ура:
Код: plaintext
1.
2.
3.
      public ViewResult List() 
        {
            return View(i_pr_rep.Products.Where(a=>a.Name == "Kayak").ToList());
        }
Скорее всего ошибка в записи, подскажи и как тогда записать
вот это i_pr_rep.Products.Where(a=>a.Name == "Kayak").ToList()через ключевые слова а не через лямбда методы??? Где ошибка в первой записи не пойму. Кто нибудь подскажите плиз!!!

Ps. только что по аналогии переписал первый пример все получилось,кажется надо так ( public IEnumerable<Category> Get_category_list(int Id)
{
return (Category_table.Where(a=>a.ParentId == Id).ToList());
}), а почему по другому не получается ума не приложу.???
Подскажите люди добрые!
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36924701
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kane_sql... только что по аналогии переписал первый пример все получилось,кажется надо так ( public IEnumerable<Category> Get_category_list(int Id)
{
return (Category_table.Where(a=>a.ParentId == Id).ToList());
}), а почему по другому не получается ума не приложу.???
Подскажите люди добрые!
Могу ошибаться, но мне кажется, что в linq не поддерживаются "проекции" класса на самого себя, т.е. из контекста запроса, который и так возвращает IQueryable<Category> нельзя возвращать select new Category(...) (но можно - что-то другое, хоть анонимный класс).
Интуитивно, оно и понятно - зачем делать "масло масляное"?
А точно - нет времени искать по спецификациям или в рефлекоре...

З.Ы. совет - поставьте фреймворк с английской версией сообщений об ошибках, опять же, припоминаю, что что-то подобное я уже видел на английском и это было гораздо внятнее...
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36924734
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-qu...
Могу ошибаться, но мне кажется, что в linq не поддерживаются "проекции" класса на самого себя
...
Ошибаюсь, в чистом LINQ - на ура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var catalog = new[] { new Category("firts"), new Category("second"), new Category("third") };
            var list = (from a in catalog where a.Name == "second" select new Category(a.Name + "1")).ToList();
            list.ForEach(c=>Console.WriteLine(c.Name)); // <- second1
            Console.ReadLine();
        }
    }

    class Category
    {
        public string Name { get; private set; }

        public Category(string name)
        {
            Name = name;
        }
    }
}
Остается грешить на LINQ2SQL...

З.Ы. через пяток минут и это проверю...
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36924739
Kane_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qu-qu, наверное да,
Кажется почти решил, если с помощью запросного синтаксиса, то получится как-то так:
Код: plaintext
1.
2.
return (from a in Category_table
                    where (a.ParentId == Id)
                    select a ).ToList();
Только все равно не понятно как выбрать нужные столбцы, а не всю строчку a из таблицы.
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36924776
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-qu...
Остается грешить на LINQ2SQL...
ЧТД

З.Ы. "явная конструкция" - сильный перевод ("поубывав бы" (с)).
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36924787
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kane_sql...
Только все равно не понятно как выбрать нужные столбцы, а не всю строчку a из таблицы.
1. созданием промежуточного класса (вроде CategoryDTO, CategoryViewData, etc.), который будет служить источником данных для View (строго говоря, Category - это сущность из Domain (BLL) и она не обязана передаваться на уровень представления);
2. возвратом анонимного класса (правда, View тогда перестанет быть строго-типизированным).

З.Ы. жаль, что вопросы привязки данных к View выходят за рамки тематики данного раздела...
(можно было бы продолжить).
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36924828
Kane_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему тогда здесь http://www.mikesdotnetting.com/Article/105/ASP.NET-MVC-Partial-Views-and-Strongly-Typed-Custom-ViewModels конструкция с new класс {} работает???
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36924838
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kane_sqlПочему тогда здесь http://www.mikesdotnetting.com/Article/105/ASP.NET-MVC-Partial-Views-and-Strongly-Typed-Custom-ViewModels конструкция с new класс {} работает???
Наверное, потому. что EF - это не L2S...
(у него модель на EF сделана).
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36924871
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-quKane_sqlПочему тогда здесь http://www.mikesdotnetting.com/Article/105/ASP.NET-MVC-Partial-Views-and-Strongly-Typed-Custom-ViewModels конструкция с new класс {} работает???
Наверное, потому. что EF - это не L2S...
(у него модель на EF сделана).
Кстати, вдогонку...

Внимательно читайте статью - там ArticleSummary и ArticleTitle это как раз классы DTO, а ни разу не классы из Entity Model (Article и т.д.), т.е. принцип проекции на "сторонние" классы вполне соблюдается...

З.Ы. вы же не знаете наверняка - что возвращает from a in de.ArticleSet?
(можно догадываться, что ObjectSet<Article>, но это явно не то, что помешает создавать из него проекции: ArticleSummary и ArticleTitle).
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36925047
Kane_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНаверное, потому. что EF - это не L2S...
(у него модель на EF сделана).
А ну да извиняюсь за ламерский вопрос, недосмотрел :)

Кажется я понял, сделал также: в общем нужно извлечь из класса со столбцами id NameCategory ParentId только NameCategory и ParentId, для этого создаем класс DTO и пихаем в него нужные данные, тогда конструкция с new DTOкласс {} работает, то есть вот так

Код: plaintext
1.
2.
3.
        public IEnumerable<CategoryViewData> Get_category_list(int Id) 
        {
            return (from a in Category_table where (a.ParentId == Id) select new CategoryViewData{NameCategory = a.NameCategory, ParentId = a.ParentId});// Здесь перекидываем в DTO класс
        }

В контроллере
Код: plaintext
1.
2.
3.
4.
5.
6.
        public ActionResult List(int? Id)
        {
            int _id = Id ?? 0;
            Main_Linq_Aticles mla = new Main_Linq_Aticles();
            return View(mla.Get_category_list(_id));
            
        }

qu-qu, так? я все правильно понял???
Спасибо разъяснил.
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36925120
Kane_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
жаль, что вопросы привязки данных к View выходят за рамки тематики данного раздела...
А где это можно обсудить?? не подскажешь, хотелось бы сделать как у него вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>


<%{
    foreach (var item in ViewData["mostpopular"] as IEnumerable<ArticleTitle>)
    {%>
      <p>
<%=Html.RouteLink(
            item.Head,
            "Details",
            new
            {
              controller = "Article",
              action = "Details",
              id = item.ID
            })%>
      </p>
<% }
  }%>

но почему-то ide ругается на as IEnumerable<CategoryViewData>
В общем делаю так
В контроллере:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
public ActionResult List(int? Id)
        {
            int _id = Id ?? 0;
            Main_Linq_Aticles mla = new Main_Linq_Aticles();
            ViewData["category_list"] = mla.Get_category_list(_id);
            return View(ViewData);
            
        }
В основном представлении:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Linq_Aticles.Models.CategoryViewData>>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">

    

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

<% Html.RenderPartial("ViewUserControl1");  %>
</asp:Content>
В партиал представлении:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>

<% foreach (var item in ViewData["category_list"] as IEnumerable<CategoryViewData> )
   { %>
   
   <%=item.NameCategory  %>
   <%=item.ParentId  %>
   
<% } %>
При этом выдает ошибку:
he model item passed into the dictionary is of type 'System.Web.Mvc.ViewDataDictionary', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[Linq_Aticles.Models.CategoryViewData]'.
Что неправильно сделал скажи пожалуйста??
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36925515
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kane_sql...
qu-qu, так? я все правильно понял???
...
Правильно...
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36925520
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kane_sql
Код: plaintext
жаль, что вопросы привязки данных к View выходят за рамки тематики данного раздела...
А где это можно обсудить??
...
дык, здесь недалеко ...
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36925543
Kane_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аааааа !!! Всё разобрался :)
Вот конечный вариант для частичного представления:
Класс для полного представления:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
namespace Linq_Aticles.Models
{
    public class CategoryUnionViewData
    {
            public CategoryUnionViewData() { } // Конструктор
            public IEnumerable<CategoryViewData> cat_view_data { get; set; }
    }
}

Контроллер:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
   public ActionResult List(int? Id)
        {
            int _id = Id ?? 0;
            Main_Linq_Aticles mla = new Main_Linq_Aticles();
            CategoryUnionViewData ct = new CategoryUnionViewData();
            ct.cat_view_data = mla.Get_category_list(_id);
            return View(ct);
            
        }
Частичное представление:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Linq_Aticles.Models.CategoryViewData>>" %>

<% foreach (var item in Model  )
   { %>
   
   <%=item.NameCategory  %>
   <%=item.ParentId  %>
   
<% } %>
Основное представление:
<
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" Inherits="System.Web.Mvc.ViewPage<Linq_Aticles.Models.CategoryUnionViewData>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">

    

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

<% Html.RenderPartial("ViewUserControl1",Model.cat_view_data);  %>
</asp:Content>

Вот тока единственное не понятно:
Почему у него класс в начале страницы указывается не по полному пути так:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<ArticleTitle>>" %>
А у меня такое не работает приходится это писать:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Linq_Aticles.Models.CategoryViewData>>" %>
А если написать так:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<CategoryViewData>>" %>
Выдает ошибку: Не удалось найти имя типа или пространства имен 'CategoryViewData
Почему??? Вообще не понятно?
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36925548
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kane_sql...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>

<% foreach (var item in ViewData["category_list"] as IEnumerable<CategoryViewData> )
   { %>
   
   <%=item.NameCategory  %>
   <%=item.ParentId  %>
   
<% } %>
При этом выдает ошибку:
he model item passed into the dictionary is of type 'System.Web.Mvc.ViewDataDictionary', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[Linq_Aticles.Models.CategoryViewData]'.
Что неправильно сделал скажи пожалуйста ??

По-моему, забыл вот это:
Код: plaintext
1.
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Linq_Aticles.Models.CategoryViewData>>" %>
...
(у тебя партиал-вью не типизированное, а ничего кроме CategoryViewData отображать не должно, мне кажется, что его лучше типизировать).
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36925564
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kane_sql...
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<CategoryViewData>>" %>
Выдает ошибку: Не удалось найти имя типа или пространства имен 'CategoryViewData
Почему??? Вообще не понятно?
Он не привел в примере одну важную директиву, которую надо вставить в начало aspx/ascx файлов:
Код: plaintext
1.
<%@ Import Namespace="Linq_Aticles.Models" %>
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36925573
Kane_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
дык, здесь недалеко...
Хотя тему создавать уже наверное не буду ради практически решенного вопроса, спасибо огромное за советы, единственное что непонятно почему нельзя указывать <CategoryViewData>, а приходится
<Linq_Aticles.Models.CategoryViewData> ведь люди как-то делают так <ArticleTitle>, без лишней писанины...
...
Рейтинг: 0 / 0
Явная конструкция объекта типа ... в запросе не поддерживается.
    #36925587
Kane_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А... , все понятно, qu-qu огромное спасибо, растолковал, ура, я спасен, ато голову сломал.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Явная конструкция объекта типа ... в запросе не поддерживается.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]