0

の製品を持っていDataTableます。各製品には、重量と返品先住所があります。差出人住所は 7 つのフィールドで構成されています。

個別の住所を循環して、製品の総重量を合計する必要があります。

例のテーブルは次のようになります...

Product weight  address1    address2    address3            city            state               postcode    country
A123    6       House       1st Street  some place          a city          a state             AB1 2CD     GB
A456    3       House       1st Street  some place          a city          a state             AB1 2CD     GB
A789    4       House       1st Street  some place          a city          a state             AB1 2CD     GB
A123    6       House2      2st Street  another place       another city    another state       EF2 3GH     GB
A456    3       House2      2st Street  another place       another city    another state       EF2 3GH     GB
A789    4       House2      2st Street  another place       another city    another state       EF2 3GH     GB

重み 13 を返す 2 つのアドレスがあるとします。

住所フィールド (製品ではない) でグループ化し、住所で重みを合計するだけです。国と合計重量も返す必要があります。

これはlinqを使用して可能ですか?SqlDataAdaptorまたは、 で を使用したほうがよいでしょうDataTableか? どうすればできるかSqlDataAdaptorはわかっていますが、Linq をどうしたらよいかわかりません。オーバーヘッドには linq の方が適していると思いますか?

4

2 に答える 2

3

GroupBy()、すべての商品を個別の住所ごとにサブコレクションにグループ化します。次にSelect()、各サブコレクションの重みを合計して、合計の重みを提供します。

var totals = products
        .GroupBy(p => new 
        { 
            address1 = p.Field<string>("address1"),
            address2 = p.Field<string>("address2"),
            address3 = p.Field<string>("address3"),
            city = p.Field<string>("city"),
            state = p.Field<string>("state"),
            postcode = p.Field<string>("postcode"),
            country = p.Field<string>("country")
        })
        .Select(g => new 
        {
             Total = g.Sum(p => p.Field<int>("weight"),
             Country = g.Key.country
        });

使用例:

foreach (var address in totals)
{
    Console.WriteLine(string.Format("Country: {0}, Weight: {1}", address.Country, address.Total));
}
于 2013-03-18T10:30:16.747 に答える
2

テーブルの行をすべての住所フィールドでグループ化し、各グループの合計を計算します。

var query = 
    from p in table.AsEnumerable()
    group p by new {
         Address1 = p.Field<string>("address1"),
         Address2 = p.Field<string>("address2"),
         Address3 = p.Field<string>("address3"),
         City = p.Field<string>("city"),
         State = p.Field<string>("state"),
         Postcode = p.Field<string>("postcode"),
         Country = p.Field<string>("country")
    } into g
    select new { 
        Address = g.Key, 
        TotalWeight = g.Sum(x => x.Field<int>("weight"))
    };

これにより、Address プロパティにすべての住所フィールドがあり、TotalWeight プロパティに重みの合計がある一連の匿名オブジェクトが得られます。

于 2013-03-18T10:29:34.067 に答える