如何将“linq”的结果返回到数据表?

如何获得返回数据表的结果?linq


我正在尝试以下线程的解决方案:

选择具有重复值的数据表的所有记录


但它无法为我编译。


这是我的代码


IEnumerable<DataRow> dtrow = default(IEnumerable<DataRow>);

dtrow = dtTable.AsEnumerable().GroupBy(x => x["MerkTypeID"]).Where(x => x.Count() > 1);

using (DataTable table = dtrow.CopyToDataTable())

{


}

但VS给出了这个错误


错误 CS0266 无法将类型隐式转换为 。存在显式转换(您是否缺少强制转换?System.Collections.Generic.IEnumerable<System.Linq.IGrouping<object, System.Data.DataRow>>System.Collections.Generic.IEnumerable<System.Data.DataRow>


我也试过这样


var dtrow = dtTable.AsEnumerable().GroupBy(x => x["MerkTypeID"]).Where(x => x.Count() > 1);

using (DataTable table = dtrow.CopyToDataTable())

{


}

但现在我得到这个错误


错误 CS0311 该类型不能用作泛型类型或方法中的类型参数“T”。没有从 到 的隐式引用转换。System.Linq.IGrouping<object, System.Data.DataRow>DataTableExtensions.CopyToDataTable<T>(IEnumerable<T>)System.Linq.IGrouping<object, System.Data.DataRow>System.Data.DataRow


那么如何做到这一点呢?为什么它似乎在我找到此代码的链接中起作用?


编辑

我尝试了亨利的这个建议:


IEnumerable<DataRow> dtrow = default(IEnumerable<DataRow>);

dtrow = (IEnumerable<DataRow>)gttDataTableOpdrachtCar.Table.AsEnumerable().GroupBy(x => x["MerkTypeID"]).Where(x => x.Count() > 1);

using (DataTable table = dtrow.CopyToDataTable())

这编译,但在运行时我得到这个错误:


其他信息:无法将类型为“WhereEnumerableIterator2[System.Object,System.Data.DataRow]]”的对象强制转换为类型“System.Collections.Generic.IEnumerable'1[System.Data.DataRow]”。1[System.Linq.IGrouping


摇曳的蔷薇
浏览 167回答 2
2回答

至尊宝的传说

您可以使用以下代码:var&nbsp;result&nbsp;=&nbsp;dtTable.AsEnumerable().GroupBy(x&nbsp;=>&nbsp;x["MerkTypeID"]) &nbsp;&nbsp;&nbsp;&nbsp;.Where(x&nbsp;=>&nbsp;x.Count()&nbsp;>&nbsp;1) &nbsp;&nbsp;&nbsp;&nbsp;.SelectMany(x&nbsp;=>&nbsp;x.ToList()) &nbsp;&nbsp;&nbsp;&nbsp;.CopyToDataTable();如果按 对行进行分组,则返回具有多个成员的组的所有行。MerkTypeID

MMMHUHU

类型不匹配。这就是编译器告诉你的。执行 .GroupBy clasue,它创建了一个组的集合,据我所知,您需要DataRows的平面集合。你需要摆脱.GroupBy clause,或将组集合转换为平面列表。现在,您有一个组集合,每个“MerkTypeID”对应一个组,每个组都包含具有该 MerkTypeID 值的所有记录。
打开App,查看更多内容
随时随地看视频慕课网APP