也許很簡單,所以請原諒我的無知...如何獲取IQueryable <T>擴展方法而不是IEnumerable <T>擴展?
據我所知,還有Where()
擴展方法的一對夫婦的口味:
Queryable.Where<TSource> Method (IQueryable<TSource>, Expression<Func<TSource, Boolean>>)
Enumerable.Where<TSource> Method (IEnumerable<TSource>, Func<TSource, Boolean>)
兩個上述擴展名位於System.Linq
命名空間中,所以我完全可以做Where()
有足夠的證據證明我已經導入了正確的名稱空間 - 或者是否有我需要用於IQueryable擴展的另一個名稱空間?
我的理解是,IQueryable<T>
繼承自IEnumerable<T>
,但爲什麼我無法獲得IQueryable<T>
擴展?
class Test
{
IQueryable<Test> SomeMethod(Func<T, bool> criteria)
{
return new List<Test> { new Test() }.AsQueryable().Where(criteria); // compiler error converting IEnumerable<T> to IQueryable<T>
}
}
如上所示,有應是可用的擴展方法返回的IQueryable?爲什麼它解決了IEnumerable擴展?
請描述一下你真正想做什麼。你的代碼甚至沒有編譯:*擴展方法必須是靜態*。您試圖在非靜態類中聲明非靜態擴展方法。 – ulrichb
我的錯誤 - 我會糾正它,但答案是顯而易見的 - 我正在通過'Func'強制IEnumerable 擴展名,當我需要的當然是'表達式'。如果只有我停下來閱讀我發佈的所有這些可愛鏈接... –
Smudge202