gpt4 book ai didi

c# - 将 Linq 查询连接到 DataTable 并将结果连接到 DataView

转载 作者:行者123 更新时间:2023-12-02 00:47:55 25 4
gpt4 key购买 nike

我有两个 DataTables 、 Items 及其组。我有一个 linq 查询,通过连接 2 个表来获取项目名称及其组名称。

    EnumerableRowCollection<DataRow> dvquery = (from item in Items.AsEnumerable()
join grp in groups.AsEnumerable()
on item.Field<byte>("Group_ID") equals grp.Field<byte>("ID")
into item_grp_join
from itemgrp in item_grp_join
select new
{
ItemName = (string)led.Field<string>("Name"),
GName = (string)itemgrp.Field<string>("Name"),
});

DataView dv = dvquery.AsDataView();

但是我收到编译时错误

无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Data.EnumerableRowCollection”。存在显式转换(您是否缺少转换?)

如何解决这个错误?我可以轻松地将查询结果转换为列表,但我只需要一个数据 View ,这样我就可以将其作为网格的数据源。

任何帮助表示赞赏。谢谢

最佳答案

问题是您的查询返回 IEnumerable<T>匿名类型,你不能简单地将其转换为 EnumerableRowCollection<DataRow>

我现在确定您正在使用哪种类型的网格(例如,来自 winforms?WPF?ASP?ASP MVC?等),但是我希望您实际上应该能够将 linq 查询的 IEnumerable 输出传递给它如果您愿意 - 例如:

var query = (from item in Items.AsEnumerable()
join grp in groups.AsEnumerable()
on item.Field<byte>("Group_ID") equals grp.Field<byte>("ID")
into item_grp_join
from itemgrp in item_grp_join
select new
{
ItemName = (string)led.Field<string>("Name"),
GName = (string)itemgrp.Field<string>("Name"),
});
grid.DataSource = query; // or possible query.ToList() as you suggest in the question!

如果您确实需要使用 DataView 类型对象,那么有关于如何创建这些对象的博客文章,请尝试:

请注意,如果您希望使用网格进行双向绑定(bind)(例如,将更改写回数据库),那么这不太可能“正常工作” - 因为您的 IEnumerable 投影并未绑定(bind)到数据源。

关于c# - 将 Linq 查询连接到 DataTable 并将结果连接到 DataView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7347812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com