Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Явная конструкция объекта типа ... в запросе не поддерживается. / 20 сообщений из 20, страница 1 из 1
27.10.2010, 22:13
    #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
27.10.2010, 23:33
    #36924374
VitaliyBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Явная конструкция объекта типа ... в запросе не поддерживается.
Kane_sql,

Первую строку представления покажите.
...
Рейтинг: 0 / 0
28.10.2010, 01:57
    #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
28.10.2010, 09:35
    #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
28.10.2010, 09:47
    #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
28.10.2010, 09:47
    #36924739
Kane_sql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Явная конструкция объекта типа ... в запросе не поддерживается.
qu-qu, наверное да,
Кажется почти решил, если с помощью запросного синтаксиса, то получится как-то так:
Код: plaintext
1.
2.
return (from a in Category_table
                    where (a.ParentId == Id)
                    select a ).ToList();
Только все равно не понятно как выбрать нужные столбцы, а не всю строчку a из таблицы.
...
Рейтинг: 0 / 0
28.10.2010, 10:04
    #36924776
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Явная конструкция объекта типа ... в запросе не поддерживается.
qu-qu...
Остается грешить на LINQ2SQL...
ЧТД

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

З.Ы. жаль, что вопросы привязки данных к View выходят за рамки тематики данного раздела...
(можно было бы продолжить).
...
Рейтинг: 0 / 0
28.10.2010, 10:31
    #36924828
Kane_sql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Явная конструкция объекта типа ... в запросе не поддерживается.
Почему тогда здесь http://www.mikesdotnetting.com/Article/105/ASP.NET-MVC-Partial-Views-and-Strongly-Typed-Custom-ViewModels конструкция с new класс {} работает???
...
Рейтинг: 0 / 0
28.10.2010, 10:35
    #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
28.10.2010, 10:51
    #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
28.10.2010, 11:53
    #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
28.10.2010, 12:14
    #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
28.10.2010, 13:57
    #36925515
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Явная конструкция объекта типа ... в запросе не поддерживается.
Kane_sql...
qu-qu, так? я все правильно понял???
...
Правильно...
...
Рейтинг: 0 / 0
28.10.2010, 13:58
    #36925520
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Явная конструкция объекта типа ... в запросе не поддерживается.
Kane_sql
Код: plaintext
жаль, что вопросы привязки данных к View выходят за рамки тематики данного раздела...
А где это можно обсудить??
...
дык, здесь недалеко ...
...
Рейтинг: 0 / 0
28.10.2010, 14:03
    #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
28.10.2010, 14:05
    #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
28.10.2010, 14:09
    #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
28.10.2010, 14:12
    #36925573
Kane_sql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Явная конструкция объекта типа ... в запросе не поддерживается.
Код: plaintext
дык, здесь недалеко...
Хотя тему создавать уже наверное не буду ради практически решенного вопроса, спасибо огромное за советы, единственное что непонятно почему нельзя указывать <CategoryViewData>, а приходится
<Linq_Aticles.Models.CategoryViewData> ведь люди как-то делают так <ArticleTitle>, без лишней писанины...
...
Рейтинг: 0 / 0
28.10.2010, 14:16
    #36925587
Kane_sql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Явная конструкция объекта типа ... в запросе не поддерживается.
А... , все понятно, qu-qu огромное спасибо, растолковал, ура, я спасен, ато голову сломал.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Явная конструкция объекта типа ... в запросе не поддерживается. / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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