Проблема с использованием оператора Join в лямбда-выражении и дереве выражений - PullRequest
1 голос
/ 01 мая 2011

Я пишу этот метод:

public List<TResult2> SelectAndJoin<TOuter, TInner, TKey, TResult, TResult2>(IEnumerable<TInner> inner, 
                                                                      System.Linq.Expressions.Expression<Func<Regions, TKey>> outerKeySelector, 
                                                                      System.Linq.Expressions.Expression<Func<TInner, TKey>> innerKeySelector, 
                                                                      System.Linq.Expressions.Expression<Func<Regions, TInner, TResult>> resultSelector,
                                                                      Func<Regions, TResult2> selector)
    {
        using (RepositoryDataContext = new DataClasses1DataContext())
        {
                return RepositoryDataContext.Regions.Join(inner, outerKeySelector, innerKeySelector, resultSelector).AsEnumerable<TResult2>().Select<Regions, TResult2>(selector).ToList<TResult2>();

        }
    }

, но возвращаемое выражение имеет эту ошибку:

'System.Linq.IQueryable' не содержит определения для 'AsEnumerable'и лучшая перегрузка метода расширения' System.Linq.Enumerable.AsEnumerable (System.Collections.Generic.IEnumerable) 'имеет несколько недопустимых аргументов

Как мне избавиться от этой ошибки?

этот код является стандартом?

спасибо

Ответы [ 2 ]

2 голосов
/ 01 мая 2011

Вы вызываете AsEnumerable<TResult2> для перечислимого типа IQueryable<TResult>. Вы должны вызвать AsEnumerable<TResult> или вы можете даже опустить универсальный параметр и вызвать AsEnumerable()

Также ваш следующий выбор не будет работать по той же причине - вы предоставляете неправильные типы для генериков.

0 голосов
/ 01 мая 2011

Возможно, я упускаю суть ... но:

IQueryable наследуется от IEnumerable, поэтому я думаю, что AsEnumerable() не требуется в этом коде.нужно / нужно выполнить запрос перед выполнением Select, тогда вы могли бы использовать ToList() вместо AsEnumerable() - это было бы более понятно

Мне также интересно, если вы включаете using System.Linqв вашем файле .cs - AsEnumerable() является методом расширения в System.Linq

...