Реализовать неподдерживаемый метод LINQ to Entities - PullRequest
2 голосов
/ 13 апреля 2010

LINQ to Entities имеет много методов LINQ, помеченных как «неподдерживаемые» (http://msdn.microsoft.com/en-us/library/bb738550.aspx).

Есть ли способ реализовать некоторые из этих методов руками? Или мне стоит ждать следующего релиза EF?

Мне особенно нужен этот метод:

IQueryable<TResult> Select<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, int, TResult>> selector)

Спасибо

UPD: например, я хочу использовать select следующим образом:

var usersWithRowNumbers = allUsers.Select ((u, index) => new {UserID = u.UserID, Index = index});

Ответы [ 2 ]

2 голосов
/ 13 апреля 2010

Что-то в этом роде?

allUsers.Select(u => new {UserID = u.UserID}).ToList().Select((u, index) => new {UserID = u.UserID, Index = index})

EDIT

Если вы хотите сделать дополнительную фильтрацию, сделайте это перед выполнением ToList ():

allUsers.Select(u => new {UserID = u.UserID}).AdditionalFilters().ToList().Select((u, index) => new {UserID = u.UserID, Index = index})

Если это не решение, пожалуйста, будьте более точны с тем, чего вы хотите достичь. Пример с данными или sql запросом был бы хорош.

2 голосов
/ 13 апреля 2010

LINQ to Entities (и другие реализации LINQ, основанные на IQueryable<T>) работают путем перевода деревьев выражений в целевую систему (в LINQ to Entities: SQL).

Для поддержки дополнительных операторов необходимо будет внести изменения в этот уровень перевода, который лежит в основе реализации провайдеров.

Учитывая, что SQL ориентирован на наборы, я сомневаюсь, что когда-либо будут поддерживаться любые операторы запросов, которые поддерживают делегат или дерево выражений, принимающее индекс.

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