C# 为什么我不能在Linq查询()中获取.CopyToDataTable()
以下代码示例借用自MSDN。我的代码中没有可用的query.CopyToDataTable()。(请参阅我下面代码中的注释行)C# 为什么我不能在Linq查询()中获取.CopyToDataTable(),c#,asp.net,linq,C#,Asp.net,Linq,以下代码示例借用自MSDN。我的代码中没有可用的query.CopyToDataTable()。(请参阅我下面代码中的注释行) publicstaticboolsetphysicianasnoserver(数据表dt) { 数据表dtPhysicianServer=dt; DataTable DTPhysicanClient=GetPhysicanClient(); 变量查询= 来自DTPhysicanServer.AsEnumerable()中的SPhysician 在DTPhysicanCl
publicstaticboolsetphysicianasnoserver(数据表dt)
{
数据表dtPhysicianServer=dt;
DataTable DTPhysicanClient=GetPhysicanClient();
变量查询=
来自DTPhysicanServer.AsEnumerable()中的SPhysician
在DTPhysicanClient.AsEnumerable()中加入CPPhysican
关于SPhysician.Field(“PhysicianNumber”)等于
CPPhysician.Field(“PhysicianNumber”)
选择新的
{
PhysicianNumber=cpPhysician.Field(“PhysicianNumber”)
};
DataTable FilterDt=query;//query.CopyToDataTable();
//这里还需要编写代码
返回true;
}
它存在于特定的命名空间中。是否导入它
System.Data.DataTableExtensions.CopyToDataTable()
同时确认添加了该参考
System.Data.DataSetExtensions
您需要引用
System.Data.DataSetExtensions
程序集并使用System.Data
命名空间。select语句返回的是字符串序列(IEnumerable
或IQueryable
),而不是数据行序列。CopyToDataTable()仅在IEnumerable
上可用,其中T是或派生自DataRow
不要选择新的{…}——这将为您提供该类型的新序列,请尝试:
select CPhysician;
它将返回所需的CPPhysican行序列
编辑
如果希望将非datatable派生的T转换为datatable,则MSDN有一个示例类,该类反映出任何类型并执行转换
是否引用了System.Data.DataSetExtensions程序集?此扩展方法已在此处定义。进一步导航到MSDN online,我将进入此页面:
它在System.Data名称空间(使用System.Data)中显示它,并且您需要引用System.Data.DataSetExtensions.dll。我认为这是因为您创建了一个匿名类型来保存
字段
对象。
试试这个:
var query = from SPhysician in dtPhysicianServer.AsEnumerable()
join CPhysician in dtPhysicianClient.AsEnumerable()
on SPhysician.Field<string>("PhysicianNumber") equals
CPhysician.Field<string>("PhysicianNumber")
select CPhysician;
DataTable FilterDt = query.CopyToDataTable();
var query=来自DTPhysicanServer.AsEnumerable()中的SPhysician
在DTPhysicanClient.AsEnumerable()中加入CPPhysican
关于SPhysician.Field(“PhysicianNumber”)等于
CPPhysician.Field(“PhysicianNumber”)
选择CPP物理学家;
DataTable FilterDt=query.CopyToDataTable();
CopyToDataTable
的定义:
公共静态数据表CopyToDataTable(
这是一个数不清的来源
)
其中T:DataRow
因此,您在查询中选择的类型必须是
IEnumerable
,其中T
扩展了DataRow
对我来说,这个问题是由使用Dotnet Core 2.0引起的,它似乎无法在转换后将IEnumerable
转换回数据表
如果你尝试调用CopyToDataTable()
你会收到什么错误消息?如果是这个问题,那么调用AsEnumerable就会失败,不是吗?我想你是对的。我只做了一点研究,没有测试VS。。。我看到@Rex M可能对这个问题有正确的答案:-)DataTable.AsEnumerable如果不包括它也会失败。这不是一个参考问题。DataSetExtensions程序集已经存在。+1是唯一完整和准确的解释(虽然可能需要引用DataSetExtensions,但这并不能解决问题)。听起来不错。但请告诉我怎么把它修好。如果我执行IEnumerable查询=//以上全部代码,它不允许我在Linq查询中加入Join。您是否尝试过引用其他人提到的DataSetExtensions?
var query = from SPhysician in dtPhysicianServer.AsEnumerable()
join CPhysician in dtPhysicianClient.AsEnumerable()
on SPhysician.Field<string>("PhysicianNumber") equals
CPhysician.Field<string>("PhysicianNumber")
select CPhysician;
DataTable FilterDt = query.CopyToDataTable();
public static DataTable CopyToDataTable<T>(
this IEnumerable<T> source
)
where T : DataRow