2013-10-16 123 views
0

我正在尋找一種解決方案,開始在.net Framework 2.0中生活,現在已經升級到Framework 4.0,所以我可能會缺少必需的參考和/或Imports線的地方,我想......Aggregate X Into Count()is not accessible

我已經得到形式LINQ查詢:

Dim x = Aggregate myDataRow As System.Data.DataRow In myDataTable _ 
     Where (booleanCondition1) _ 
     AndAlso (booleanCondition2) _ 
     AndAlso (booleanCondition3) _ 
     Into Count() 

我得到的編譯錯誤「Definition of method 'Count' is not accessible in this context」。

據我所知,從the literature Count()函數應該是可用的(顯然應該註冊爲關鍵字)。

我在做什麼錯?

編輯:

我只是改變了我的代碼,以直線選擇方法,像這樣:

Dim x = (From myDataRow As System.Data.DataRow In myDataTable _ 
     Where (booleanCondition1) _ 
     AndAlso (booleanCondition2) _ 
     AndAlso (booleanCondition3) _ 
     Select myDataRow) 

,當我試圖讓x的.Count,我得到的消息「'Count' is not a member of 'System.Data.EnumerableRowCollection(Of System.Data.DataRow)」和according to the MSDN, it is

完全困惑,現在。

+0

作爲文檔指向的內容,您是否有對「System.Data.DataSetExtensions.dll」的引用和「System.Data」的導入? – Ocelot20

+0

如果只使用Enumerable擴展方法,或者可能'System.Core.dll'並導入'System.Linq'。 – Ocelot20

+0

我沒有'System.Data'導入,碰巧,但添加它似乎沒有幫助。我剛剛在對象瀏覽器中訪問過System.Data.EnumerableRowCollection,它似乎根本沒有任何成員...... Curiouser和curiouser。 – Frosty840

回答

1

首先,讓我們來看看EnumerableRowCollection(Of TRow),並注意Count是一個擴展方法:

Count<TRow>()重載。返回序列中元素的數量。 (由Enumerable定義。)

Enumerable本身具有這樣的信息:

命名空間: System.Linq的
大會: System.Core程序(在System.Core.dll)

請注意,您將始終在MSDN幫助中找到有關程序集和名稱空間的信息。兩者都是重要的,而且也沒有一個一對一類型的命名空間和組件之間的對應關係,它在找到。

所以,接下來,讓我們來看看extension methods。不幸的是,它說:

通常,定義擴展方法的模塊與調用它的模塊不是同一個模塊。相反,包含擴展方法的模塊是進口的,如果它需要,以使其範圍

,然後並沒有真正意味着什麼的模塊在範圍更全面精細。它確實暗示其向儘管最終的:

當具有相同簽名的兩個擴展方法在範圍和訪問,在一個更高的優先級將被調用。擴展方法的優先級基於用於使方法進入範圍的機制。以下列表顯示了從高到低的優先級層次結構。

  • 在當前模塊內定義的擴展方法。

  • 擴展方法定義在當前名稱空間或其父項中的任何一個的數據類型中,並且子名稱空間的優先級高於父名稱空間。

  • 在當前文件的任何類型導入中定義的擴展方法。

  • 在當前文件的任何名稱空間導入中定義的擴展方法。

  • 在任何項目級別類型導入中定義的擴展方法。

  • 在任何項目級名稱空間導入中定義的擴展方法。

由於前兩個子彈是不相關的情況下,只有剩下適用。他們都處理進口

Imports

進口語句使包含在給定命名空間類型直接引用。

希望從以上所有內容中,您可以看到爲什麼引用正確的程序集本身不足,並且還需要添加導入。