我的目标是完成联接操作,并且查询值必须存储在Datatable中。
var query = from db_data1 in DBData1.AsEnumerable()
join cust_data1 in DBData2.AsEnumerable()
on db_data1.Field<string>("FULLNAME").Trim() equals
cust_data1.Field<string>("Name").Trim()
where
cust_data1.Field<string>("Apartment").Trim() == db_data1.Field<string>("SERVICE_APARTMENT").Trim()
&& cust_data1.Field<string>("Name").Trim() == db_data1.Field<string>("FULLNAME").Trim()
select new
{
Name = db_data1.Field<string>("FULLNAME"),
ACCOUNT_NUMBER = db_data1.Field<string>("ACCOUNT_NUMBER")
};
DataTable merged;
if (query.Any())
merged = query.**CopyToDataTable**();
else
merged = DBData1.Clone();
但在这里,我在CopyToDataTable()函数中出错
类型"AnonymousType#1"不能用作泛型类型或方法"System.Data.DataTableExtensions.CopyToDataTable(System.Collections.Generic.IEnumerable)"。没有从"AnonymousType#1"到的隐式引用转换"System.Data.DataRow".
如何解决这个问题?
查询返回匿名类型的IEnumerable,因为您正在使用select new { }
创建无类型序列
如果您选择使用明确的目标类型(即select CustDataRow
),则可以使用CopyToDataTable(),不过出于您的目的,这可能需要创建一个辅助对象。