0

材料のレシピを保存するために使用するデータテーブルがあります。類似した成分名があるかどうかを調べるコードがいくつかあります。ある場合は、重量を合計して表に追加します。

ここで、テーブルにも存在する他のいくつかの列を追加できるようにしたいと考えています。

ここに私が現在持っているものがあります

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、、、、、FlourPLinqBatchPで以下のコードを使用して各列の値を取得し、データテーブルに保存するにはどうすればよいですか?

4

1 に答える 1

0

BakerPFlourP、またはのデータ型がわからない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();

または、1 つのフィールドでグループ化し、別のフィールドを要約して、組み合わせることもできます。

ただし、重要なことは、GroupBy を使用しているため、出力内のすべてのフィールドをグループ化の一部にするか、何らかの方法で (.Sum() または .Average() または .Max を使用して) 要約する必要があることです。 () または .First() など) したがって、出力にこれらの追加フィールドが必要な場合は、それらを処理する方法を決定する必要があります。

于 2013-11-13T21:01:31.227 に答える