Я пытаюсь получить все enities из контекста, которые находятся внутри коллекции. Хотя он работает следующим образом:
Ticket ticket = context.Tickets.Where(p => p.TicketId == ticketId);
ticket.Tasks.Where(p => !message.Tasks.Select(t => t.Id).Contains(p.Id));
это заканчивается таким исключением
context.Tasks.Where(p => message.Tasks.Select(t => t.Id).Contains(p.Id));
Обратите внимание, что Id
имеет тип Guid
Мой вопрос: как я могу написать второй запрос, чтобы получить все Задачи из контекста, входящего в состав сообщения. Коллекция задач?
редактировать
NotSupportedException
Невозможно создать постоянное значение типа DataObjects.KeyValueDataObject'2 [[System.Guid, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089], [System.String, mscorlib, Version = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089]] '. В этом контексте поддерживаются только примитивные типы или типы перечислений.
И класс
public class KeyValueDataObject
{
public TKey Id { get; set; }
public TValue Name { get; set; }
}
Реализован как KeyValueDataObject<Guid,String>
Проблема в том, что Linq-to-Entities должен преобразовать ваш список в постоянное выражение, чтобы превратить ваши Contains
в инструкцию IN
, которая может не работать с GUID
Попробуйте сначала извлечь поисковые запросы в "постоянный" список:
var lookup = message.Tasks.Select(t => t.Id).ToList();
context.Tasks.Where(p => lookup.Contains(p.Id));
Попробуй это:
var taskIds = message.Tasks.Select(t => t.Id).ToArray();
context.Tasks.Where(p => taskIds.Any(t => t.Id == p.Id));
Попробуйте следующее:
var tasks = context.Tasks.ToList().Where(p => message.Tasks.ToList().Any(t => t.Id.Contains(p.Id)));
Я надеюсь, что эта помощь
код EDITED
Cannot convert lambda expression to delegate type 'System.Func<KeyValueDataObject<System.Guid,string>,bool>' because some of the return types in the block are not implicitly convertible to the delegate return type
Я думаю, это из-за общего типа данных?