0

我需要在 linq 中对 DataTable 对象执行此查询

Select * from mydatatable m where m.id==myid group by myField

如果我尝试此代码,我在 CopyToDataTable() 上出现错误

int _idOrg=10;
DataTable dtAbb = (DataTable)ViewState["dtAbb "];
            var var_sez = from myRow in dtAbb .AsEnumerable()
                              group myRow by myRow.Field<string>("ID_IST") into newRow
                              where newRow.First().Field<int>("ID_ORG") == _idOrg
                              select newRow;
 DataTable dtSez = null;
 if (var_sez.Count() > 0)
     dtSezione = var_sez.AsEnumerable().CopyToDataTable();
4

2 回答 2

1

您不能CopyToDataTable在一组的序列上使用,DataRows而只能在IEnumerable<DataRow>. 因此,您要么必须从每个组中获取所有行(但是为什么要分组),或者使用每个组的特定行。这里我只取第一个:

var var_sez = from myRow in dtAbb.AsEnumerable()
              where myRow.Field<int>("ID_ORG") == _idOrg
              group myRow by myRow.Field<string>("ID_IST") into grp
              select grp.First();

请注意,我还移动WhereGroupBy. 您只选择第一行 ID 与给定 ID 匹配的组。我假设您只希望使用此 ID 的行。因此,这种方法“更正确”且更有效。

于 2013-09-27T15:28:35.100 回答
0

如果您想ToDataTable在查询结果上使用 a - 您必须稍微扩展您的 LINQ。

“LINQ in Action”一书在此处提供了一个不错的代码伴侣。下载它,找到它们ObjectShreder.cs并将DataSetLinqOperators.cs它们包含到您的项目中,并且这些方法可用于其他类型IEnumerable<DataRow>

参考:http ://codecorner.galanter.net/2009/12/17/grouping-ado-net-datatable-using-linq/

于 2013-09-27T15:38:43.040 回答