首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-12-17 
第一次用linq,请教怎么把结果转化为datatable?本帖最后由 rainxies 于 2012-11-08 21:03:00 编辑我看到单

第一次用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


谢谢,这样可以的!!

热点排行