【发布时间】:2019-06-19 18:14:50
【问题描述】:
我有 4 个要加入的数据表,但不知道如何有效地加入。
我将前两个表加入,创建了 apptDetails 的第三个对象,它是 DataRows 的 IEnumerable。我无法将其恢复为 DataTable,因此我可以对其进行更多连接。我在apptDetails.CopyToDataTable() 上遇到错误:'IEnumerable' does not contain a definition for 'CopyToDataTable' and no accessible extension method 'CopyToDataTable' accepting a first argument of type 'IEnumerable' could be found (are you missing a using directive or an assembly reference?)
DataTable customer = ETL.ParseTable("customer");
DataTable appointments = ETL.ParseTable("appointments");
IEnumerable apptDetails = from t1 in customer.AsEnumerable()
join t2 in appointments.AsEnumerable() on Convert.ToInt32(t1["customerId"]) equals Convert.ToInt32(t2["customerId"])
into tableGroup
select new
{
customerId = t1["customerId"],
TotalAppointments = tableGroup.Count(),
appointment_missed = Convert.ToInt32(t1["MissedAppt"]),
appointment_show_rate = (
tableGroup.Count()>0 ?
Math.Round((1 - ((double)Convert.ToInt32(t1["MissedAppt"]) / (double)tableGroup.Count())),2)
: 0
)
};
DataTable dt = apptDetails.CopyToDataTable();
我最初只是使用var apptDetails,但看起来我需要更多的类型转换,所以我尝试了以下操作:
IEnumerable<DataRow> apptDetails
IEnumerable<EnumerableRowCollection> apptDetails
as well as:
DataTable dt = apptDetails.CopyToDataTable<DataRow>();
DataTable dt = apptDetails.CopyToDataTable<EnumerableRowCollection>();
我需要加入客户表和约会表,然后将新列也添加到一个平面表中。我在做这件事时缺少什么,或者有更好的方法吗?
性能是一个因素,因为我们正在谈论 20,000 名客户和 80,000 次约会,而且在此之后还会有 2-3 个表加入,所以我想充分了解使用 Linq 执行此操作的“正确”方式。
【问题讨论】: