LINQ to DataSet,DataTable.AsEnumerable()未被识别。

43

我完全不熟悉 LINQ,现在正试图用它查询我的 DataSet 数据。我严格按照这个示例操作,但却没有成功。

我知道我的 DataTable 需要在末尾加上 .AsEnumerable,但是这个方法无法被 IDE 识别。我做错了什么吗?我是否漏掉了一个参考或引入,这个在示例中没有展示(微软的示例可能不总是准确的),如果是的话,是哪一个呢?或者是其他问题导致的错误?

样例代码:

Imports System
Imports System.Linq
Imports System.Linq.Expressions
Imports System.Collections.Generic
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.Common
Imports System.Globalization


//Fill the DataSet.
Dim ds As New DataSet()
ds.Locale = CultureInfo.InvariantCulture
//See the FillDataSet method in the Loading Data Into a DataSet topic.
FillDataSet(ds)

Dim products As DataTable = ds.Tables("Product")

Dim query = From product In products.AsEnumerable() _
            Select product
Console.WriteLine("Product Names:")
For Each p In query
    Console.WriteLine(p.Field(Of String)("Name"))
Next

我的项目中的引用包括:

System
System.Data
System.Drawing
System.Windows.Forms
System.Xml
3个回答

113

尽管包含扩展方法的类位于System.Data命名空间中,但它位于一个默认情况下未添加到项目中的程序集中。因此,请将System.Data.DataSetExtensions添加到您的项目中,然后它就可以正常工作了。请记住,即使在添加了引用之后,任何希望使用该类定义的扩展方法的类,也需要使用System.Data的using语句。


谢谢,现在可以了!我为这个问题苦恼了很久。:) 对于System.Data.DataSetExtensions,感谢大家的帮助,但你因为更好的解释获得了“采纳”。再次感谢。 - GSTD
即使项目的引用中已经包含了,为什么仍然需要添加 using 语句? - Charmie
@Charmie using语句使得命名空间在文件/类中可用。因为它是一个扩展方法,所以当作为扩展使用时,您不能使用完整的命名空间引用它,因此必须包含命名空间。 - tvanfosson
2
我已经添加了程序集引用到 System.Data.DataSetExtensions (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5.2\System.Data.DataSetExtensions.dll),并且有必要的 using System.Datausing System.Data.DataSetExtensions,但是我仍然得到错误提示:"The type or namespace name 'DataSetExtensions' does not exist in the namespace 'System.Data' (are you missing an assembly reference?)"。 - Tim

12

我认为在使用AsEnumerable之前,你可能需要将System.Data.DataSetExtensions引用添加到你的项目中。


8
你需要引用 System.Data.DataSetExtensions

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接