Linq2Sql: использование IQueryable в select - PullRequest
0 голосов
/ 16 сентября 2010

Это, вероятно, довольно тривиально, но .... У меня довольно сложный запрос linq, который я поместил в функцию IQueryable, которую я хотел бы повторно использовать в проекте.Но когда я использую это в выборе, я получаю «System.Linq.IQueryable`1 [LINQPad.User.Orders] Foo (System.Guid) не имеет перевода в SQL»: (очень упрощенно, чтобы показать, что япосле)

void Main()
{
 (from e in Clients
 select new {
  e.CompanyName,
  Orders = Foo(e.Id).Count()
 }).Take(20).Dump();
}

IQueryable<Orders> Foo(Guid clientId)
{
 return Orders.Where(e => e.ClientId.Equals(clientId)); 
}

Не работает, но работает следующее:

void Main()
{
 (from e in Clients
 select new {
  e.CompanyName,
  Orders = Orders.Where(f => f.ClientId.Equals(e.Id)).Count()
 }).Take(20).Dump();
}

Можно ли переписать запрос без переписывания Foo?

1 Ответ

2 голосов
/ 16 сентября 2010

Проблема в том, что вы не можете просто вставить функцию в ваш запрос Linq, потому что Linq-to-SQL или Linq-to-Entities не знают, как ее перевести. хорошее описание проблемы и решение доступны на сайте LINQPad.

Альтернативой является сначала поместить набор данных в память (например, с помощью ToList()), но на самом деле это не приведет к достижению именно того, что вам нужно.

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