10

次のプロパティを持つオブジェクトのリストがあります。

int TownId, int CompanyId, int ProductId, int[] Prices

TownCompanyこれをオブジェクトのリストに変換したいと思います。次のプロパティを持つ各アイテム:

int TownId, int CompanyId, int[] Products, int[] Prices

だから私はできる

flatList.GroupBy(l => new { l.TownId, l.CompanyId })

各町/会社のペアのすべての製品と価格を含むグループのリストを取得します。ここで、このルックアップの各キーについて、すべての値をフラット化/マージします。私は使用できるはずのようですSelectManyが、私は常にそれに供給する投影法に少し混乱します...

このグループのリストを各キーのフラット化されたリストのリストに変換するにはどうすればよいですか?私は理にかなっていると思います。

例:

私の元のリストがこれである場合:

new[] {
    new Item { TownId = 1, CompanyId = 10, ProductId = 100, Prices = new [] { 1, 2 } },
    new Item { TownId = 1, CompanyId = 10, ProductId = 101, Prices = new [] { 3 } },
};

次のようなリストが必要です。

{
    { TownId: 1, CompanyId: 10, Products: [100, 101], Prices: [1, 2, 3] }
}
4

2 に答える 2

16

必要なのは;SelectManyだけです。それは単純だからPricesです:ProductIdSelect

flatList
.GroupBy(l => new { l.TownId, l.CompanyId })
.Select(g => new {
    g.Key.TownId
,   g.Key.CompanyId
,   ProductIds = g.Select(o => o.ProductId).ToArray()
,   Prices = g.SelectMany(o => o.Prices).ToArray()
});
于 2012-11-09T11:55:19.537 に答える
15

私があなたを正しく理解していれば、次のようなものです。

flatList.GroupBy(l => new { l.TownId, l.CompanyId })
        .Select(g => new 
        {
            TownId = g.Key.TownId,
            CompanyId = g.Key.CompanyId,   
            Products = g.Select(o => o.ProductId).ToArray(),
            Prices = g.SelectMany(o => o.Prices).ToArray()
        });
于 2012-11-09T11:56:29.643 に答える