2012-05-14 122 views
0

嚴重的是,我必須缺少一些簡單的東西。任何幫助將不勝感激。IQueryable與IEnumerable ...擴展方法

這是場景: 1)創建一個名爲DoSomething的IQueryable擴展方法,帶有適當的簽名(IQueryable,int x,int y)。 2)使用與IQueryable相同的簽名創建名爲DoSomething的IEnumerable擴展方法,EXCEPT接受/返回IEnumerable而不是IQueryable。 3)在IEnumerable擴展方法中,將enumerable轉換爲Queryable(AsQueryable)並嘗試調用IQueryable.DoSomething方法。

出於某種原因,上述方案似乎對IEnumerable擴展方法而不是IQueryable進行遞歸調用。我不明白爲什麼。

我知道IQueryable擴展IEnumerable;但是,.NET擴展似乎檢測並正常工作。例如,variable.AsQueryable()。至少通過intellisense(和ReSharper)將(1)調用Queryable擴展,而不是Enumerable擴展。當我寫我自己的時候,它看起來不起作用,並且創建了一個無限循環。

+0

你的問題現在有點陳舊了。任何更新?提供完整的示例可能有助於實現這一目標。 – DannyMeister

回答

0

我相信答案是,它的工作原理正如你所描述的那樣。這是我的小LINQPad測試程序。無可否認,這種情況比你描述的稍微簡單一些,因爲我返回的是void並且沒有參數。

void Main() 
{ 
    int[] numbers = { 1, 2, 3, 4, 5 }; 
    numbers.AsQueryable().DumpLast<int>(); 
    numbers.DumpLast<int>(); 
} 

public static class TestExtensions 
{ 
    public static void DumpLast<T>(this IQueryable<T> list) 
    { 
     list.Last<T>().Dump(); 
    } 

    public static void DumpLast<T>(this IEnumerable<T> list) 
    { 
     list.AsQueryable().DumpLast<T>(); 
    } 
} 

輸出:

5 
5 

如果您可以提供更具體的例子,那麼也許有什麼東西,我們可以發現,是造成問題。