2011-09-09 4 views
0

これはあまりにも基本的なことではないと思っていますが、私は似たような質問をしましたが、理解できないようです。私は一般的なようにしたいリポジトリのパターンを使用してLINQ文をラムダとして渡す方法

イム - ここでは、私が一般的なために持っているものです。

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を返すメソッドを宣言し、最初のパラメータとして渡すと、コンパイルエラーは発生しません。イムは困惑した。

助けてください?ラムダでこれを呼び出す正しい方法は何ですか?または、私のジェネリック薬が駄目から外れている場合、それを宣言するにはどうすればいいですか?私はむしろあなただけIQueryable<T>を取り、その直接と連携Func<IQueryable<T>>,に取って、

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); 
     } 
+0

あなたは私たちに失敗したラムダ式のいくつかを示すことができた場合、それは本当に役立つだろう... –

+0

はどこジェネリック型Tから()メソッドを取得するために来shoudl?それはクラスレベルで宣言されていますか? – sll

答えて

0

通常

+0

さて、私は自分自身に予測していた馬鹿だったようです:-) – Joe

+0

まあ、それは私がばかだと思っています:-) 私はラムダにちょっと新しいので、まだ間違いを選びません。クエリはパラメータを必要としなかったので、私はすべてのlinqの試行の始めに "()=>"を含めなかった。 "()=>"を追加するとすべての作業が完了しました。しかし、私は、デリゲートがJimのコメントに従って必須ではないことを知りました。これをIQueryableに変更しました。 – Joe

0

GETは、一般的なTが欠落している...のIQueryableは最高だろう返すのFuncを仮定しました。

static public IQueryable<T> Get<T>(IQueryable<T> source, uint page=0, uint pageSize=10) 
{ 
    return source 
      .Skip((int)(page * pageSize)) 
      .Take((int)pageSize); 
} 
関連する問題