Linq для объектов EF4
У меня есть модель домена групп с name
, desc
и набор users
(принадлежащий группе)
Я пытаюсь получить все группы, к которым принадлежит определенный пользователь. Это моя инструкция LinQ:
var results = from p in AuthorizationService.UnitOfWork.Groups.FindAll()
where
(p.Users != null && p.Users.Select(u => u.Id).Contains(CurrentUser.Id))
select p.Name;
Я получаю следующую ошибку при попытке выполнить запрос
Cannot compare elements of type 'System.Collections.Generic.ICollection`1'. Only primitive types (such as Int32, String, and Guid) and entity types are supported.
Любая помощь приветствуется. Спасибо!
Ответы
Ответ 1
Удалить нулевое тестирование для объекта "Пользователи", в любом случае он ленив загружен, является ли ваш пользователь виртуальным? если это так, он ленивый, он нормально удаляет нулевое тестирование, а затем
var results =
from p in AuthorizationService.UnitOfWork.Groups.FindAll()
where
p.Users.Any(u => u.Id == CurrentUser.Id)
select p.Name;
Ответ 2
Разве ты не можешь идти наоборот?
var results = AuthorizationService.UnitOfWork.Users.Include("Groups").First(u => u.ID == CurrentUser.Id).Select(u => u.Groups);
Надеюсь, что это поможет.