2015-11-04 4 views
-1

Я пытаюсь инкапсулировать IQuerable в свой собственный общий класс, а затем выполнить Select() на этом с помощью моего собственного метода Select(), но я не могу заставить его работать. ..Как использовать IQuerable.Select в моем собственном классе

у меня есть это: (не реальный рабочий код еще)

public class PagedSpQuery<T> 
    { 
     private IQueryable<T> q = null; 

     public PagedSpQuery(MyContext DB) 
     { 
      q = DB.MyEntity.SqlQuery("select * from MyTable").AsQuerable(); 
     } 

     public IQueryable<T> Select<T>(Expression<Func<T, T>> selector) 
     { 
      return q.Select(selector);  
     } 
    } 

Я получаю ошибку на q.Select(selector);

Он не будет принимать параметр ..

я могу следовать за этим Проблема некоторые пути, но я не могу понять, как заставить это работать, если это возможно, в любом случае ..

Любые идеи будут оценены ..

спасибо ..

+1

IQueryable * является * общим, как IEnumerable или LINQ, он не привязан к Entity Framework. Фактически, он предназначен для * инкапсуляции * запрашиваемых поставщиков. Почему вы думаете, что вам нужно инкапсулировать его самостоятельно, тем более, что вы в конечном итоге используете тот же синтаксис? –

+1

Какой смысл в селекторе, который возвращает тот же тип? Вы мутируете входы или создаете _new_ объекты на основе коллекции ввода? –

ответ

2

Вы определить класс как общий, затем определяется общая функция, которая повторно использует аргумент типа T, что смущает конвейер. Там нет причин, чтобы добавить общий аргумент функции, так просто взять его:

public IQueryable<T> Select(Expression<Func<T, T>> selector) 
{ 
    return q.Select(selector);  
} 

Но почему вы оберточной методы Linq вообще? Почему бы просто не реализовать класс IQueryable<T> и использовать реализации Linq?

+0

Ничего себе, что окончательно сделал трюк ... :) Я не так опытен с генераторами – Beaker

+0

@Beaker Ну код в вопросе даже не будет скомпилирован, даже с этим изменением, поэтому, по-видимому, он не является репрезентативным для вашего фактического кода. – Servy

+0

@Servy, какую ошибку вы получаете? Он компилируется для меня после изменения. –

Смежные вопросы