第一次用linq,请教怎么把结果转化为datatable?
本帖最后由 rainxies 于 2012-11-08 21:03:00 编辑 我看到单独查一个table是可以的:
IEnumerable<DataRow> query =
from order in orders.AsEnumerable()
where order.Field<DateTime>("OrderDate") > new DateTime(2001, 8, 1)
select order;
DataTable boundTable = query.CopyToDataTable<DataRow>();
但如果用到join,示例是这样:
var query =
from order in orders.AsEnumerable()
join detail in details.AsEnumerable()
on order.Field<int>("SalesOrderID") equals
detail.Field<int>("SalesOrderID")
where order.Field<bool>("OnlineOrderFlag") == true
&& order.Field<DateTime>("OrderDate").Month == 8
select new
{
SalesOrderID =
order.Field<int>("SalesOrderID"),
SalesOrderDetailID =
detail.Field<int>("SalesOrderDetailID"),
OrderDate =
order.Field<DateTime>("OrderDate"),
ProductID =
detail.Field<int>("ProductID")
};
请教各位老大,怎么把上面这个query转化为datatable呢?
它没有“CopyToDataTable”方法
[最优解释]
你可以这样来实现:
http://blog.csdn.net/q107770540/article/details/6556210
[其他解释]
直接tolist 不行么?为什么一定要table
------其他解决方案--------------------
我需要datatable另作他用
IEnumerable<DataRow> query = (from ee in dt1.AsEnumerable()
join n in dt2.AsEnumerable()
on ee.Field<string>("ENG_NAME") equals
n.Field<string>("ENG_NAME")
select new
{
id = ee.Field<Decimal>("ID"),
userName = ee.Field<string>("USER_NAME"),
location = n.Field<string>("LOCATION")
}) as IEnumerable<DataRow>;
DataTable dt3 = new DataTable();
DataTableExtensions.CopyToDataTable<DataRow>(query, dt3, LoadOption.PreserveChanges);
//dt3=query.CopyToDataTable<DataRow>();
以上语法倒是可以,但运行时报如下错误:
值不能为 null。
参数名: source
DataTableExtensions.CopyToDataTable<DataRow>(query, dt3, LoadOption.PreserveChanges);
[其他解释]
用上面注释的那一句,错误是一样的
DataTable dt3=query.CopyToDataTable<DataRow>();
值不能为 null。
参数名: source
DataTable dt3=query.CopyToDataTable<DataRow>();
[其他解释]
select new { } 这已经是匿名类了
要想使用CopyToDataTable() 这个扩展方法 ,必须是datarow类型才行
[其他解释]
谢谢,这样可以的!!