Linq CopyToDataTable使用扩展方法

时间:2014-05-12 16:15:29

标签: linq

您好我试图将以下linq结果复制到数据表中。我看到的copytodatatable的唯一例子是使用查询格式,而不是扩展方法。想知道是否有人知道如何使用扩展方法(我已经尝试将结果投射到IEnumerable数据流但是它没有工作)。

DataTable dtItemPricingBreakDown = 
    SiteHelper.getItemPricingBreakDown(CustomerId, 
                                        PriceBookID, 
                                        deliveryZip, 
                                        dtItems, 
                                        db, 
                                        departmentId);

dtItemPricingBreakDown.AsEnumerable()
                      .GroupBy(i => new { 
                                            sku = i.Field<string>("sku"), 
                                            deptid = i.Field<int>("department_id") 
                                         })
                      .Select(group => new 
                                        { 
                                            sku = group.Key.sku, 
                                            deptid = group.Key.deptid, 
                                            cnt = group.Count() 
                                        });

更新

迟到总比没有好,抱歉延迟回应。我的实际问题似乎是查询语法和扩展方法。

像这样的东西根据msdn
http://msdn.microsoft.com/en-us/library/bb386921(v=vs.110).aspx):

// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable orders = ds.Tables["SalesOrderHeader"];
DataTable details = ds.Tables["SalesOrderDetail"];

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")
    };

DataTable orderTable = query.CopyToDataTable(); 

但是当我试着这个......

var query = from exx in dtItemPricingBreakDown.AsEnumerable()
            group exx by new { sku = exx.Field<string>("sku"), companyId = exx.Field<int>("department_id") } into grp
            select new { sku = grp.Key.sku, DepartmentID = grp.Key.companyId, Cnt = grp.Count() };

DataTable dt3 = query.CopyToDataTable();

我得到了这个例外:&#34;没有从anonymoustype1到system.data.datarow&#34;的隐式引用转换。我也尝试过对msdn示例中的数据集所做的事情,我仍然得到错误。扩展方法明智我尝试这样的事情......并且仍然有相同的例外。

DataTable dt3 = dtItemPricingBreakDown.AsEnumerable().GroupBy(i => new
                {
                    sku = i.Field<string>("sku"),
                    deptid = i.Field<int>("department_id")
                }).Select(group => new
                {
                    sku = group.Key.sku,
                    DepartmentID = group.Key.deptid,
                    cnt = group.Count()
                }).Cast<DataRow>().CopyToDataTable();

0 个答案:

没有答案