读书人

第一次用linq请问如何把结果转化为d

发布时间: 2012-12-17 09:31:41 作者: rapoo

第一次用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类型才行

[其他解释]
引用:
你可以这样来实现:
http://blog.csdn.net/q107770540/article/details/6556210


谢谢,这样可以的!!

读书人网 >.NET

热点推荐