2011-09-09 76 views
0

我希望這不是一個太基本的問題 - 我看過類似的問題,但似乎無法理解,所以我伸出援手。使用我要讓普通的倉庫模式如何在lambda表達式中傳遞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並將它作爲第一個參數傳遞,那麼這個方法就沒有編譯錯誤。我難倒了。

請幫忙?用lambda來調用它的正確方法是什麼?或者,如果我的通用性不好,如何最好地聲明它?我以爲,返回一個IQueryable將是最好的函數求...

+0

這將真正幫助,如果你能告訴我們一些已經失敗的lambda表達式的... –

+0

凡從通用類型T shoudl來獲得()方法?它是在課堂上聲明的嗎? – sll

回答

0

通常,而是採取在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

好吧,看起來我是一個白癡(我曾預測自己):-) – Joe

+0

好吧,看起來我是一個白癡:-) 我有點新來lambdas,所以不能找出錯誤。由於查詢不需要任何參數,所以在我所有的linq嘗試的開始處我都沒有包含「()=>」。加入「()=>」使這一切工作。但我確實知道,根據Jim的評論,並不需要委託人 - 我已將其更改爲僅僅是IQueryable,現在看起來好多了 - 謝謝你:-) – Joe

0

獲取丟失的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); 
     }