名前の行が一致しているときに枝番にしたいのですが、枝番号の列が1を羅列するだけのものになってしまいます。
この場合ループの処理がうまくいっていないことが原因なのでしょうか?
処理がどこでおかしくなっているのか教えていただきたいです。
c#
1 2public class OracleDT //こちら追記 3 { 4 //格納先 5 public string name{ get; set; } 6 public int count{ get; set; } 7 public string code{ get; set; } 8 } 9 public class CsvDT 10 { 11 //格納先 12 public string name{ get; set; } 13 public int count{ get; set; } 14 public string code{ get; set; }//書き漏らし追記 15 } 16 public class ResultDT 17 { 18 19 //格納先 20 public string NO{ get; set; } 21 public string 名前{ get; set; } 22 public int 枝番号{ get; set; } 23 24 }
c#
1 List<OracleDT> oracleDTs = createOracleList(); 2 List<CsvDT> csvDTs = createCsvList(); 3 int i++; 4 var innnerjoin = from c in csvDTs 5 join o in oracleDTs 6 on c.code equals o.code 7 8 select new ResultDT 9 { 10 NO = i++, 11 名前 = c.Name, 12 枝番号 = 1,//c.countだと全体に対しての連番になってしまう 13 14 }; 15 // 対象でグルーピングして、2件以上なら抽出 16 var num = innnerjoin.GroupBy(key=>key.名前).Where(over => over.Count()>1); 17 foreach(var data in num) 18 { 19 // インデックス付与 20 var groupData = csvDTs.Select((g, index) => new {csvDTs = g,index=index}); 21 foreach (var sub in groupData) 22 { 23 sub.csvDTs.count = sub.index; 24 25 } 26 27 } 28
以下追記
今の状態
No,名前,枝番 1,satou,1 2,satou,1 3,kagaya,1 4,gotou,1 5,gotou,1 6,gotou,1
最終的にこういうものを表示したい。
No,名前,枝番 1,satou,1 2,satou,2 3,kagaya,1 4,gotou,1 5,gotou,2 6,gotou,3
追記
for(ResultDT item in innnerjoin)
{
Console.WriteLine(item.名前);//データ(satou)
Console.WriteLine(item.枝番);//データ(1)
}
補足説明
質問に書いてある「今の状態」 var innnerjoin = ... のコードで取得した innnerjoin の内容が上記の追記に記載してあるようにforeach(ResultDT item in innnerjoin){ }のループの状態になります。
それをコード内の
>> // 対象でグルーピングして、2件以上なら抽出
var num =....以降のコードで「最終的にこういうものを表示したい」に記載している枝番号列の状態にしたいと考えています。
回答1件
あなたの回答
tips
プレビュー