2009-10-01 86 views
3

我是相當新的泛型,所以我不知道是否有人可以解釋我遇到以下問題。實際上,在ASP.NET MVC應用程序中的所有控制器中,我需要返回一個過濾列表(以便在用戶將指定某些過濾標準的位置填充JqGrid)。每個控制器列表方法將返回一個不同的IQueryable列表,所以我設置了創建一個通用的方法來處理這個。類型參數不能從使用推斷

當我創建我的方法時,我在特定的控制器中定義了它。一切都編譯完成,我得到了我期望的結果。因爲我想從我所有的控制器中調用此方法,我假設我可以簡單地創建另一個靜態類,將該方法放在那裏,然後從我的所有控制器調用該方法。但是,如果我嘗試的方法轉移到其他地方以外的控制器這就是調用它,編譯器會抱怨的方法有以下錯誤的最後一行:

的方法System.Linq.Queryable.Where<TSource>(System.Linq.IQueryable<TSource>, System.Linq.Expressions.Expression<System.Func<TSource,bool>>) 類型參數不能從推斷用法。 嘗試明確指定類型參數。

public static IQueryable<T> FilteredList<T>(IQueryable<T> list, string filters) 
{ 
    var qb = new QueryBuilder<T>(); 
    var whereClause = qb.BuildWhereClause(filters); 
    return list.Where(whereClause); 
} 

我試過list<T>.Where(whereClause)list.Where<T>(whereClause)和幾乎所有其他的組合,我要去哪裏錯了,誰能給我解釋一下。

+1

qb.BuildWhereClause返回什麼?表達式>? – 2009-10-01 16:00:47

+0

你會想'Where Where '應該工作。 – Joren 2009-10-01 16:07:00

+0

當你使用'Where Where (T)',你得到了什麼錯誤信息(它應該是不同的)?另外,whereClause'的確切實際類型是什麼? – 2009-10-01 16:13:19

回答

8

這將暗示您的BuildWhereClause方法未返回適當的類型。

編譯器試圖從listwhereClause推斷出TSource的類型。現在whereClause應該是一個Expression<Func<T, bool>>但我懷疑它不是。將鼠標懸停在varwhereClause聲明中,以查明它實際是什麼。當返回類型不明顯時,我不會推薦使用var

+0

Jon,感謝您的回覆,正如您從我的其他帖子中看到的一樣,BuildWhereClause實際上是返回一個字符串,因爲我正在使用Dynamic Linq - 現在所有工作都正常。關於不對非顯而易見的返回類型使用var的好處,我會盡量在將來更加明確。附:順便提一下,深入討論你的c#深度書。 – 2009-10-01 17:31:44

相關問題