行,所以我寫了以下功能:無法從通用投得到LINQ where子句
private IQueryable<LogEntry> SelectAll<T>(IEnumerable<LogEntry> logEntries, List<Expression<Func<LogEntry, bool>>> whereClause)
{
var selectAllQuery = from l in logEntries select l;
if (whereClause != null)
{
foreach (Expression<Func<LogEntry, bool>> whereStatement in whereClause)
{
selectAllQuery = selectAllQuery.Where(whereClause);
}
}
}
但它不會編譯。當它試圖在「selectAllQuery」返回的東西如下:這將引發一個錯誤:
System.Collections.Generic.IEnumerable」不包含定義‘在哪裏’和最佳推廣方法重載 System.Linq的.Enumerable.Where(System.Collections.Generic.IEnumerable,System.Func)」有一些無效參數
我已經試過這種鑄造每哪種方式我能想到的都無濟於事。在上面的代碼中,運行初始選擇語句返回selectAllQuery
類型System.Linq.Enumerable.WhereSelectEnumerableIterator<LogEntry,LogEntry>
很明顯,我錯過了LINQ的一些基本知識。但是什麼?
乾杯。
是的,你說得對。 – jason 2010-12-13 14:13:01
好像都沒有工作。根據Intellisense在whereClause上沒有「Compile」方法,並將var更改爲AsQueryable()我仍然收到類似的錯誤 - Error 'System.Linq.IQueryable'不包含'Where'的定義,和最好的擴展方法重載'System.Linq.Enumerable.Where (System.Collections.Generic.IEnumerable ,System.Func )'有一些無效的參數。我在發佈之前確實嘗試了AsQueryable,因爲它似乎是一個明顯的解決方案。 –
2010-12-13 14:16:27
@Matt:對不起,應該是'whereStatement。編譯「 - 如果你在原始代碼的循環體中使用了whereStatement,但是使用AsQueryable,那也可以。將使用建議的名稱更改進行編輯... – 2010-12-13 14:18:25