質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

Q&A

解決済

2回答

1936閲覧

C#: List型の中で一部要素のみが異なるデータを文字列連結したい

merll0573

総合スコア17

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

0グッド

0クリップ

投稿2019/08/22 07:43

C#

1class Product{ 2 public string Shop {get; set;} 3 public string Name {get; set;} 4 public string Size {get; set;} 5} 6 7var prod = new List<Product>(){ 8 new Product(){Shop="A",Name="Tシャツ", Size="S"}, 9 new Product(){Shop="A",Name="Tシャツ", Size="M"}, 10 new Product(){Shop="A",Name="ジャケット", Size="L"}, 11 new Product(){Shop="B",Name="ジャケット", Size="L"} 12}; 13

上記のコードのprodが、

{[Shop="A",Name="Tシャツ",Size="S,M"],[Shop="A",Name="ジャケット",Size="L"],[Shop="B",Name="ジャケット",Size="L"]}

となるようにまとめたいです。
LINQのGroupBy句を利用すればShopとNameが同一のデータごとにグループ化できることまでは分かったのですが、その後、どうすればSize="S,M"というようにまとめることができるのかがわかりませんでした。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

サイズの重複は考慮していませんが、こんな感じかな・・・

csharp

1var query = prod.GroupBy(p => new { p.Shop, p.Name }) 2 .Select(g => new Product() { 3 Shop = g.Key.Shop, 4 Name = g.Key.Name, 5 Size = string.Join(",", g.Select(p => p.Size)) 6 });

#hihijijiさんの回答を参考にインデントを変更いたしました(^_^; ほとんど一緒でしたね。

投稿2019/08/22 08:12

編集2019/08/22 08:17
takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

merll0573

2019/08/22 23:39

お二人とも大変ありがとうございました! 無事解決することができました。
guest

0

こんなのどうでしょう?

C#

1var prod = new List<Product> 2{ 3 new Product {Shop="A",Name="Tシャツ", Size="S"}, 4 new Product {Shop="A",Name="Tシャツ", Size="M"}, 5 new Product {Shop="A",Name="ジャケット", Size="L"}, 6 new Product {Shop="B",Name="ジャケット", Size="L"} 7}; 8 9var answer = prod.GroupBy(p => new { p.Shop, p.Name }) 10 .Select(g => new Product 11 { 12 Name = g.Key.Name, 13 Shop = g.Key.Shop, 14 Size = g.Select(p => p.Size).Aggregate((a, b) => $"{a},{b}") 15 }) 16 .ToArray();

投稿2019/08/22 08:08

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問