Я работал над проблемой, с которой я столкнулся при использовании LINQ to Entities при использовании замыканий.
Судя по всему, L2E не поддерживает замыкания. Имея в виду:
var users = from user in UserRepository.FindAll()
select new UserDTO
{
UserId = user.UserId,
Tickets = from ticket in TicketRepository.FindAll()
where ticket.User == user
select new TicketDTO
{
TicketId = ticket.TicketId
}
};
(ПРИМЕЧАНИЕ. В предложении «где» существует проблема. Мне не разрешено сравнивать объект с другим объектом, поскольку они не являются примитивными типами EF. Разрешены только такие вещи, как Int32, Guid и т. д.)
, недействителен, потому что я не могу сравнить «ticket.User» с «user»
Это просто пример проблемы, с которой я столкнулся, и я понимаю, что могу сравнить идентификатор, поскольку это примитивный тип, а не замыкание.
На самом деле мой сценарий намного сложнее, чем этот, но это сценарий, который мне нужно решить сейчас.
Обходной путь, который я нашел в Интернете, использует подзапрос. Это работает, но для моего сценария это не очень эффективно.
Вопрос:
Кто-нибудь из вас знает, если:
- Entity Framework 4 будет поддерживать замыкания в LINQ to Entities?
- Есть ли лучшее решение этой проблемы, чем использование подзапросов?
- Любые дополнительные знания, которые у вас есть по этой теме, будут очень признательны!