为什么我没有在Linq Query()中获得.CopyToDataTable()

时间:2009-10-20 15:12:55

标签: c# asp.net linq

以下代码示例来自MSDN here。我没有在我的代码中获得query.CopyToDataTable()。 (请参阅以下代码中的注释行)。

public static bool SetPhysicianAsNotonServer(DataTable dt)
        {
            DataTable dtPhysicianServer = dt;
            DataTable dtPhysicianClient = GetPhysicianClient();

            var query =
                from SPhysician in dtPhysicianServer.AsEnumerable()
                join CPhysician in dtPhysicianClient.AsEnumerable()
                on SPhysician.Field<string>("PhysicianNumber") equals
                    CPhysician.Field<string>("PhysicianNumber")
                select new
                {
                    PhysicianNumber = CPhysician.Field<string>("PhysicianNumber")
                 };

            DataTable FilterDt = query; //query.CopyToDataTable();
            //YET TO DO CODE HERE
            return true;
        }

7 个答案:

答案 0 :(得分:21)

您的select语句返回一系列字符串(IEnumerable<string>IQueryable<string>),而不是一系列DataRows。 CopyToDataTable()仅适用于IEnumerable<T>,其中T是或来自DataRow。

而不是select new { ... } - 只会为您提供该类型的新序列,请尝试:

select CPhysician;

哪个应该返回所需的CPhysician行序列。

修改 如果您希望将非数据表导出的T转换为数据表,MSDN有一个反映任何类型并执行转换的示例类。

http://msdn.microsoft.com/en-us/library/bb669096.aspx

答案 1 :(得分:7)

它存在于特定的命名空间中,你导入它吗?

System.Data.DataTableExtensions.CopyToDataTable() 

同时确认添加此参考

System.Data.DataSetExtensions 

答案 2 :(得分:4)

我认为这是因为您创建了一个匿名类型来保存Field对象。 试试这个:

    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();

CopyToDataTable<T>的定义:

public static DataTable CopyToDataTable<T>(
    this IEnumerable<T> source
)
where T : DataRow

因此,您使用查询选择的内容必须是IEnumerable<T>类型T扩展DataRow

答案 3 :(得分:2)

您需要引用System.Data.DataSetExtensions程序集并使用System.Data命名空间。

答案 4 :(得分:0)

您是否引用了System.Data.DataSetExtensions程序集?这个扩展方法在那里定义。

答案 5 :(得分:0)

在线进一步导航到MSDN会带我到这个页面:http://msdn.microsoft.com/en-us/library/system.data.datatableextensions.aspx

它在System.Data命名空间(使用System.Data)中说它,你需要引用System.Data.DataSetExtensions.dll。

答案 6 :(得分:0)

对我来说,此问题是由使用Dotnet Core 2.0引起的,它在转换后似乎无法将IEnumerable转换为DataTable

只需将它添加到遇到相同问题的任何人。