我有下面的代碼從大會獲得類型的集合,其中的類型是類:錯誤使用LINQ表達式變量,而不是lambda表達式時,直接
Assembly assembly = Assembly.LoadFile(DLLFile);
var types = assembly.GetTypes().AsEnumerable().Where(x => x.IsClass);
這工作正常,並符合市場預期。然而,我想將lambda表達式拉出到Linq Expression變量中(後面將在此方法的參數中使用它)。所以,我做了以下內容:
System.Collections.Generic.IEnumerable<System.Type>' does not contain a
definition for 'Where' and the best extension method overload
'System.Linq.Enumerable.Where<TSource>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,int,bool>)' has some invalid arguments
我明白,我表達不符合謂詞System.Func<TSource,int,bool>
,但是Where
功能有:
private Expression<Func<Type, bool>> _standardFilter = (x => x.IsClass);
Assembly assembly = Assembly.LoadFile(DLLFile);
var types = assembly.GetTypes().AsEnumerable().Where(_standardFilter);
但是這不會有錯誤編譯超載,需要一個謂詞System.Func<TSource,bool>
,據我所知可以工作。
我已經嘗試將assembly.GetTypes()
(這是一個數組)的結果以幾種方式轉換爲列表,而沒有它幫助解決問題。
我也確定我已經得到了這個類的所有正確的using
聲明,因爲這似乎是幾個人在我的谷歌搜索過程中遇到的問題。
在過去,我已經成功地使用同樣的技術在IQueryable
集合,但我不明白爲什麼當Where
功能可在IEnumerable
收集這是不行的,應該接受我提供的謂詞。
非常感謝您的幫助。
'表達>'和'功能<...>'是不一樣的東西。 –
voithos
'IQueryable'上的'Where'擴展方法接受'Expression >',這就是爲什麼你以前能夠做到這一點。這允許像EF這樣的東西傳入一個表達式並在以後進行編譯。但在'IEnumerable '上,它只接受'>'。 –
因此,再次歸結爲我不注意到一個特定的詞!我真的應該退後一步,多關注我所設想的事情! – XN16