我有一个用于存储配料食谱的数据。我有一些代码可以找到是否有相似的成分名称,如果有的话,我会将重量总结并添加到表中。
现在我希望能够添加一些表中也存在的其他列。
这是我目前拥有的
protected DataTable cleanDataTable(DataTable dt)
{
var result = dt.AsEnumerable()
.GroupBy(r => r.Field<string>("Ingredients"))
.Select(g =>
{
var row = dt.NewRow();
row.ItemArray = new object[]
{
g.Key,
g.Sum(r => double.Parse(r.Field<string>("KG")))
};
return row;
}).CopyToDataTable();
dt = result;
return dt;
}
我有以下列,BakerP
,FlourP
,BatchP
,如何使用Linq?下面的代码获取每列的值并将其保存到数据表中? / p>
答案 0 :(得分:0)
我不知道BakerP
,FlourP
或BatchP
是哪种数据类型,因此以下列出了一些选项:
如果这些字段是数字的,并且您希望按照权重进行总结,那么您可以使用权重执行相同的操作,以便将这些字段添加到行中:
var row = dt.NewRow();
row.ItemArray = new object[]
{
g.Key,
g.Sum(r => double.Parse(r.Field<string>("KG"))),
g.Sum(r => double.Parse(r.Field<string>("BakerP"))), // assuming this is also a number saved as a string
// etc.
};
return row;
如果它们不是数字,或者您不想对它们进行汇总,则可以对它们进行分组,就像使用“成分”一样:
.GroupBy(r => new {
Ingredients = r.Field<string>("Ingredients"),
BakerP = r.Field<string>("BakerP"),
FlourP = r.Field<string>("FlourP"),
BatchP = r.Field<string>("BatchP")
})
.Select(g =>
{
var row = dt.NewRow();
row.ItemArray = new object[]
{
g.Key.Ingredients,
g.Key.BakerP,
g.Key.FlourP,
g.Key.BatchP,
g.Sum(r => double.Parse(r.Field<string>("KG")))
};
return row;
}).CopyToDataTable();
或者你可以混合搭配,在一个领域进行分组,同时总结另一个领域。
关键是,因为您正在使用GroupBy,所以输出中的所有字段都需要成为您分组的一部分,或者以某种方式进行汇总(使用.Sum()或。 Average()或.Max()或.First()等。)因此,如果您希望输出中包含这些附加字段,则需要确定要处理它们的方式。