gpt4 book ai didi

c# - 根据列名列表将数据表拆分为多个数据表

转载 作者:行者123 更新时间:2023-11-30 17:52:53 24 4
gpt4 key购买 nike

我有一个如下所示的数据表

ID        Country      Supplier
515 DE A
515 CH A
515 FR A
516 DE B
516 FR B
517 DE C
517 IT C

我有一个 List<string>包含动态数量的列名,例如,如果列表包含单个列:

Supplier

我想制作一个 List<DataTable>或此表中的数据集,并根据该列表中的列名分隔表,因此在这种情况下,我仅按 Supplier 分隔列,结果将是 3 个数据表,如下所示

    ----------table 1--------
515 DE A
515 CH A
515 FR A
----------table 2--------
516 DE B
516 FR B
----------table 3--------
517 DE C
517 IT C

但是如果List<string>列名称包含例如以下内容:

Supplier
Country

结果将是 7 个数据表,每个数据表包含一行

    ----------table 1--------
515 DE A
----------table 2--------
515 CH A
----------table 3--------
515 FR A
----------table 4--------
516 DE B
----------table 5--------
516 FR B
----------table 6--------
517 DE C
----------table 7--------
517 IT C

另一个例子是,如果 List<string>的列名仅包含 Country列然后结果将是

----------table 1--------
515 DE A
516 DE B
517 DE C
----------table 2--------
515 CH A
----------table 3--------
515 FR A
516 FR B
----------table 4--------
517 IT C

我如何使用 linq 实现此目的,查询将根据列表中包含的列名进行动态查询,您能指导我吗?

我已经使用 DataTable 的 daynamic 字符串完成了它。选择并选择不同的和嵌套的循环,但它看起来很复杂,我想知道是否有更有效的方法来实现这一点

最佳答案

你可能想使用 System.Linq.Dynamic

var dt = new DataTable();
var res = new List<DataTable>();

dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Country", typeof(string));
dt.Columns.Add("Supplier", typeof(string));
dt.Rows.Add(515, "DE", "A");
dt.Rows.Add(515, "CH", "A");
dt.Rows.Add(515, "FR", "A");
dt.Rows.Add(516, "DE", "B");
dt.Rows.Add(516, "FR", "B");
dt.Rows.Add(517, "DE", "C");
dt.Rows.Add(517, "IT", "C");

var fields = new List<string>() { "Supplier", "Country"};
var qfields = string.Join(", ", fields.Select(x => "it[\"" + x + "\"] as " + x));
// qfields = "it[\"Supplier\"] as Supplier, it[\"Country\"] as Country"

var q = dt
.AsEnumerable()
.AsQueryable()
.GroupBy("new(" + qfields + ")", "it")
.Select("new (it as Data)");
foreach (dynamic d in q)
{
var dtemp = dt.Clone();

foreach (var row in d.Data)
dtemp.Rows.Add(row.ItemArray);

res.Add(dtemp);
}

关于c# - 根据列名列表将数据表拆分为多个数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18030415/

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