【发布时间】:2020-09-26 03:01:51
【问题描述】:
我正在努力解决以下问题:
我有一个数据表,其中包含从 SQL Server 数据库中检索到的信息。检索到的信息与某些产品的价格有关。因此,例如,数据表具有特定价目表上特定产品的价格。一种产品可能出现在几个不同的价目表中,而今天在数据表上,每个组合都是不同的行。例如:
我需要将数据表转换为每个产品只有一行的数据表,并且价格表信息在列上:
示例数据:
几点说明:
我不知道我会有多少个价目表,所以我可以将“成本”列(例如)N 次。 需要包含产品信息(第一部分)。 每个 id_Art 不超过一行。
我一直在做以下工作,但我想退后一步,因为我可能会陷入困境并且可能会有更简单的解决方案。
目前,我正在创建按每个价目表过滤的新数据表。这背后的想法是加入数据表,但我被卡住了。
foreach(var pricelist in pricelists)
{
DataSet dataSetsingle = new DataSet();
dataSetsingle = GetDataSetForMultiTariff(tarifa, dpto, secc, fam, subfam); //This will return a datatable filtered by pricelist
System.Data.DataTable dtnew = dataSetsingle.Tables[0];
var results = from table1 in dtinitial.AsEnumerable()
join table2 in dtnew.AsEnumerable()
on new { A = table1["ID_ART"], B = table1["ID_FORMAT"] } equals new { A = table2["ID_ART"], B = table2["ID_FORMAT"] }
select new
{
table1,table2
};
}
- 我应该通过这种方法继续前进吗?我没有得到一个扁平化的结果,我不知道如何解决这个问题。
- 我可以访问数据库,因此我可能会更改查询。
- 数据透视表可以用吗?
非常感谢!
【问题讨论】:
-
一般来说,使用
DataTable不是现代方法,但有时它是最简单的。您的示例数据似乎与您的 PRODUCT/PRICELIST/PRICE 图片无关 - 对吗? -
PS 注意这总是浪费:
DataSet dataSetsingle = new DataSet(); dataSetsingle =:你刚刚创建了一个新的DataSet,然后用一个作业覆盖了它,把它扔掉了。不要那样做。
标签: c# linq .net-core datatable