powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не удалось сравнить элементы типа
3 сообщений из 3, страница 1 из 1
Не удалось сравнить элементы типа
    #39071637
ughunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не удалось сравнить элементы типа "System.Collections.Generic.ICollection`1[[Domain.Models.Regulatory, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa8ccc6c71b7889b]]". Поддерживаются только типы-примитивы, типы перечисления и типы сущностей.

Есть 2 модели:
Код: c#
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
public class Regulatory
    {
        public Regulatory()
        {
            Tags = new HashSet<Tag>();
        }

        [Display(Name = "Идентификатор документа")]
        public int Id { get; set; }

        [Display(Name = "Теги")]
        public virtual ICollection<Tag> Tags { get; set; }

    }

public class Tag
    {
        public Tag()
        {
            Articles  = new HashSet<Article>();
            Events  = new HashSet<Event>();
            Regulatories  = new HashSet<Regulatory>();
        }

        [Display(Name = "Идентификатор тега")]
        public int Id { get; set; }

        [Display(Name = "Статьи")]
        public virtual ICollection<Article> Articles { get; set; }

        [Display(Name = "События")]
        public virtual ICollection<Event> Events { get; set; }

        [Display(Name = "Акты")]
        public virtual ICollection<Regulatory> Regulatories { get; set; }

    }



далее делаем так:
Код: c#
1.
2.
3.
4.
5.
6.
var regulatories = Repository
                .AllIncluding((Regulatory reg) => reg.Tags)
                .Where(r => r.Status == DocumentStatus.Published)
                .Where(p => category == null || p.Tags.Any(t => t.Name == category))
                .OrderBy(p => p.Id)
                .ToList();



все нормально. а если так:

Код: c#
1.
var tags = Repository.Tags.Where(t => t.Regulatories != null).ToList();



получаем забавную ошибку (см. выше)
до ToList() они DbSet<T>

такая же ошибка происходит если пробежаться (начать) форычом по тегам - ну тут ясно - в DbSet не реализован интерфейс...

Что и где я делаю не так?
...
Рейтинг: 0 / 0
Не удалось сравнить элементы типа
    #39071656
ughunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон... не DbSet а {System.Data.Entity.Infrastructure.DbQuery<Domain.Models.Tag>}

запарился
...
Рейтинг: 0 / 0
Не удалось сравнить элементы типа
    #39072537
ughunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался... Если вдруг кому понадобится.
В модели указано ICollection<Regulatory> Regulatories

а здесь мы пытаемся выбрать все теги, которые принадлежат актам var tags = Repository.Tags.Where(t => t.Regulatories != null).ToList(); отношение (*-*)

Ну собственно Entity а ругается ибо тип который сравниваем это объект а не примитив, или перечисление и тем более не сущность. Соответственно не срабатывает ToList()

Решение проблемы крылось в анализе поступающих данных и конечно SQL Server Profiler помог.
Вот решение данной проблемы (без замашек, что эту проблему в другом контексте можно решить также)

Код: c#
1.
2.
3.
var tags = repository.Tags
                .Where(r => r.Regulatories.Count > 0)
                .ToList();



Тема закрыта.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не удалось сравнить элементы типа
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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