C# 为什么我不能在Linq查询()中获取.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

以下代码示例借用自MSDN。我的代码中没有可用的query.CopyToDataTable()。(请参阅我下面代码中的注释行)

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