前提・実現したいこと
初めて質問させていただきます。
データを削除する際に、削除してもOKかを確認するためのチェック処理にて
どのようにデータを抽出すればしたいことが実現できるのか行き詰ってしまいました。
次のようなマスタ同士を紐付けするテーブルがあります。
マシンID | 分類ID |
---|---|
マシンA | 分類1 |
マシンB | 分類2 |
マシンC | 分類2 |
マシンB | 分類3 |
マシンC | 分類3 |
マシンC | 分類4 |
マシンは複数の分類に所属できるようなイメージです。
ただし、ルールとしてマシンは必ずどこかの分類に所属しなければいけません。
この状態で分類3を削除しようとした場合(実際には削除フラグを立てる)
分類3に所属するマシンBおよびマシンCは、それぞれ別の分類にも所属しているため
問題なく分類3は削除できます。
しかし、分類2と分類3を同時に削除しようとした場合
マシンCは分類4に所属しているため問題ないですが
マシンBはどこにも所属しなくなってしまうため、エラーとする必要があります。
かつ、エラーメッセージ内にどの分類が削除できないのかを表示したいです。
「分類に所属しないマシンが発生するため、削除できません。対象分類:{0}」 ←複数あればカンマ区切りで表示
このようなことがしたいのですが、上手くデータを引っ張ってくる方法が思いつきません。
わかりにくくて申し訳ございませんが、方向性だけでもご助言いただけますと助かります。
よろしくお願い致します。
該当のソースコード
C#
1 public string CheckHimoduke(DbContext db, ViewModel model) 2 { 3 var result = string.Empty; 4 5 // 廃止対象となる小分類 6 var haishiBunrui = new string[] { "分類2", "分類3" }; 7 8 9 // 廃止対象の分類に紐づいている情報を取得する 10 var himoduke = (from A in db.bunrui_himoduke 11 .Where(x => haishiBunrui.Contains(x.bunrui_cd)) 12 from B in db.bunrui_himoduke 13 .Where(x => x.machine_cd == A.machine_cd) 14 select new 15 { 16 B.machine_cd, 17 B.bunrui_cd, 18 } 19 ).Distinct(); 20 21 // 上で取得できるデータ 22 // [0]:{machine_cd="マシンA", bunrui_cd="分類2"} 23 // [1]:{machine_cd="マシンA", bunrui_cd="分類3"} 24 // [2]:{machine_cd="マシンB", bunrui_cd="分類2"} 25 // [3]:{machine_cd="マシンB", bunrui_cd="分類3"} 26 // [4]:{machine_cd="マシンB", bunrui_cd="分類4"} 27 28 // 上記のうち、廃止対象外の分類にも紐づいているマシンを取得する 29 var test = from A in himoduke 30 .Where(x => !haishiBunrui.Contains(x.bunrui_cd)) 31 select A; 32 33 // 上で取得できるデータ 34 // [0]:{machine_cd="マシンB", bunrui_cd="分類4"} 35 36 37 // ここにきてどうしたらいいのかわからなくなってしまった。。 38 39 40 // エラーとなる分類を羅列して返したい(今回の場合 "分類2") 41 return result; 42 }
補足情報(FW/ツールのバージョンなど)
C#
.NET Core3.1
回答1件
あなたの回答
tips
プレビュー