Не уверен, что я делаю неправильно, получаю ошибку: Невозможно привести тип 'System.Linq.IQueryable`1' к типу 'System.Linq.IQueryable`1' - PullRequest
0 голосов
/ 05 августа 2011

у меня есть этот запрос:

var model2 = (from p in context.ViewChatPeoples
                           where ((IQueryable<int>)(from q in context.ConversationPeoples
                           where !q.Deleted && q.PersonId == info.LoginID
                           select new { q.ConversationId })).Contains(p.ConversationId)
                      select p.ConversationId).Distinct().ToList();

в LINQ / C #, однако, похоже, выдает следующую ошибку:

Unable to cast the type 'System.Linq.IQueryable`1' to type 'System.Linq.IQueryable`1'. LINQ to Entities only supports casting Entity Data Model primitive types.

не имеет смысла, я просто хочу запустить WHERE IN, но, кажется, преодолел это препятствие, которое не имеет смысла, что когда-либо !!!

спасибо

и в качестве обновления приведен окончательный рабочий код, использующий данное решение:

var model2 = (from p in context.ViewChatPeoples
                           where ((from q in context.ConversationPeoples
                           where !q.Deleted && q.PersonId == info.LoginID
                           select q.ConversationId)).Contains(p.ConversationId)
                      select p.ConversationId).Distinct().ToList();

Ответы [ 2 ]

4 голосов
/ 05 августа 2011

select new { q.ConversationId } создает анонимно типизированный объект со свойством ConversationId.Код создает IQueryable <[анонимный тип]> вместо IQueryable .

просто select q.ConversationId, чтобы получить IQueryable .

3 голосов
/ 05 августа 2011

Я думаю, это потому, что тип возврата вашего подзапроса не IQueryable<int>, а IQueryable<anonymousType>.Изменение выбора с select new { q.ConversationId } на select q.ConversationID должно разрешиться (не проверено).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...