LINQ to DataSet,DataTable.AsEnumerable() 无法识别
Posted
技术标签:
【中文标题】LINQ to DataSet,DataTable.AsEnumerable() 无法识别【英文标题】:LINQ to DataSet, DataTable.AsEnumerable() not recognized 【发布时间】:2011-04-26 08:17:28 【问题描述】:我是LINQ
的新手,我正在尝试用它查询我的DataSet
。所以我跟着this example 信了,但它不起作用。
我知道我的DataTable
最后需要.AsEnumerable
,但IDE
无法识别。我究竟做错了什么?我是否遗漏了示例中未显示的引用/导入(不会是第一次 MSDN 示例不太正确),如果是,是哪一个?还是完全是别的东西?
示例代码:
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
【问题讨论】:
【参考方案1】:虽然包含扩展的类位于 System.Data
命名空间中,但它位于默认情况下未添加到项目中的程序集中。在您的项目中添加对System.Data.DataSetExtensions
的引用,应该没问题。请记住,即使在您添加了引用之后,任何希望使用该类中定义的扩展方法的类也需要具有 System.Data 的 using 语句。
【讨论】:
谢谢,现在可以了!我一直在扯这个头发。 :) 为 System.Data.DataSetExtensions 向所有人 +1,但您会得到“接受”以获得更好的解释。再次感谢。 为什么项目的引用中已经包含了using语句,为什么还要添加using语句? @Charmieusing
语句使命名空间在文件/类中可用。因为它是一种扩展方法,所以您不能使用完整的命名空间(用作扩展时)引用它,因此必须包含命名空间。
我已将程序集引用添加到 System.Data.DataSetExtensions
(C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\System.Data.DataSetExtensions.dll ) 并拥有必要的using System.Data
和using System.Data.DataSetExtensions
,但我收到错误消息“名称空间'System.Data' 中不存在类型或名称空间名称'DataSetExtensions'(您是否缺少程序集引用?) "【参考方案2】:
我认为您可能需要在AsEnumerable
工作之前将System.Data.DataSetExtensions
引用添加到您的项目。
【讨论】:
【参考方案3】:您需要参考System.Data.DataSetExtensions
【讨论】:
以上是关于LINQ to DataSet,DataTable.AsEnumerable() 无法识别的主要内容,如果未能解决你的问题,请参考以下文章
Linq&Lumda---LINQ to DataSet的DataTable操作