Как передать в LINQ оператор как лямбду - PullRequest
0 голосов
/ 09 сентября 2011

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

Я использую шаблон репозитория, который я хочу сделать общим - здесьвот что у меня есть для универсального:

    static public IQueryable<T> Get(Func<IQueryable<T>> pred, uint page=0, uint pageSize=10)
    {
         return pred()
                .Skip((int)(page * pageSize))
                .Take((int)pageSize);
    }

Так что я хочу вызвать его, но получить "имеет недопустимые аргументы" с любой лямбдой, которую я пытаюсь.

Если я объявляю метод, которыйвозвращает IQueryable и передает его в качестве первого параметра, который работает - без ошибки компиляции.Я в тупике.

Пожалуйста, помогите?Как правильно назвать это с лямбда?Или, если мой дженерик не в порядке, как лучше это объявить?Я предположил, что Func, который возвращает IQueryable, будет лучшим ...

Ответы [ 2 ]

0 голосов
/ 09 сентября 2011

Как правило, вместо Func<IQueryable<T>>, вы просто берете IQueryable<T> и работаете с ним напрямую.

static public IQueryable<T> Get<T>(IQueryable<T> source, uint page=0, uint pageSize=10) 
{ 
     return source 
            .Skip((int)(page * pageSize)) 
            .Take((int)pageSize); 
}
0 голосов
/ 09 сентября 2011

Get отсутствует T generic

static public IQueryable<T> Get<T>(Func<IQueryable<T>> pred, uint page = 0, uint pageSize = 10)
        {
            return pred()
                   .Skip((int)(page * pageSize))
                   .Take((int)pageSize);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...