为什么我没有在Linq Query()中获得.CopyToDataTable()
下面的代码示例来自MSDN。 我没有在我的代码中获得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("PhysicianNumber") equals CPhysician.Field("PhysicianNumber") select new { PhysicianNumber = CPhysician.Field("PhysicianNumber") }; DataTable FilterDt = query; //query.CopyToDataTable(); //YET TO DO CODE HERE return true; }
您的select语句返回一个字符串序列( IEnumerable
或IQueryable
),而不是一系列DataRows。 CopyToDataTable()仅在IEnumerable
上可用,其中T是或者是从DataRow派生的。
不要select new { ... }
– 这将只为您提供该类型的新序列,请尝试:
select CPhysician;
哪个应该返回所需的CPhysician行序列。
编辑如果您希望将非数据表导出的T转换为数据表,MSDN有一个反映任何类型并执行转换的示例类。
它存在于特定的命名空间中,您导入它吗?
System.Data.DataTableExtensions.CopyToDataTable()
同时确认添加此参考
System.Data.DataSetExtensions
我认为那是因为你创建了一个匿名类型来保存Field
对象。 试试这个:
var query = from SPhysician in dtPhysicianServer.AsEnumerable() join CPhysician in dtPhysicianClient.AsEnumerable() on SPhysician.Field("PhysicianNumber") equals CPhysician.Field ("PhysicianNumber") select CPhysician; DataTable FilterDt = query.CopyToDataTable();
CopyToDataTable
定义:
public static DataTable CopyToDataTable( this IEnumerable source ) where T : DataRow
因此,您使用查询选择的内容必须是IEnumerable
类型,其中T
扩展DataRow
您需要引用System.Data.DataSetExtensions
程序集并使用System.Data
命名空间。
您是否引用了System.Data.DataSetExtensions程序集? 这里定义了这种扩展方法。
进一步导航到MSDN在线将我带到这个页面: http : //msdn.microsoft.com/en-us/library/system.data.datatableextensions.aspx
它说它在System.Data命名空间(使用System.Data),你需要引用System.Data.DataSetExtensions.dll。