バージョン VB.net 4.5.2
閲覧ありがとうございます。
単票形式の帳票で12件ずつのデータを出力します。
Daoで取得したDataTableをFoeRoopでDtoに詰め替えるのですが
どうしてもコードが冗長になるので、もっとスッキリ書ける方法はないかアドバイスを頂きたいです。
DTOクラス
VB
1 2Class RPT_0060SettingDto 3 4 Public Property biz As String 5 Public Property rack_id As String 6 7 Public Property disp_color_1 As String 8 Public Property parts_no_1 As String 9 Public Property name_1 As String 10 Public Property parts_name_1 As String 11 Public Property location_no_1 As String 12 Public Property order_point_1 As String 13 14 Public Property disp_color_2 As String 15 Public Property parts_no_2 As String 16 Public Property name_2 As String 17 Public Property parts_name_2 As String 18 Public Property location_no_2 As String 19 Public Property order_point_2 As String 20 21 'プロパティが連番で12まで続く・・・ 22 23 Public Property disp_color_12 As String 24 Public Property parts_no_12 As String 25 Public Property name_12 As String 26 Public Property parts_name_12 As String 27 Public Property location_no_12 As String 28 Public Property order_point_12 As String 29 30End Class 31 32
問題のコード
VB
1Class RPT_0060Util 2 3 Shared Function GetSettingDto(ByVal table As DataTable) As List(Of RPT_0060SettingDto) 4 5 Dim dtoList As New List(Of RPT_0060SettingDto) 6 Dim settingDto As RPT_0060SettingDto 7 8 Dim i As Integer = 0 9 10 For Each row As DataRow In table.Rows 11 '改ページしたら初期化 12 If i > 0 And i Mod 12 = 0 Then 13 dtoList.Add(settingDto) 14 settingDto = New RPT_0060SettingDto 15 End If 16 17 18 If i Mod 12 = 0 Then 19 settingDto.disp_color_1 = row("disp_color").ToString 20 settingDto.parts_no_1 = row("parts_no").ToString 21 settingDto.parts_name_1 = row("parts_name").ToString 22 settingDto.location_no_1 = row("location_no").ToString 23 settingDto.order_point_1 = row("order_point").ToString 24 ElseIf i Mod 12 = 1 Then 25 settingDto.disp_color_2 = row("disp_color").ToString 26 settingDto.parts_no_2 = row("parts_no").ToString 27 settingDto.parts_name_2 = row("parts_name").ToString 28 settingDto.location_no_2 = row("location_no").ToString 29 settingDto.order_point_2 = row("order_point").ToString 30 End If 31 32 i = i + 1 33 Next 34 dtoList.Add(settingDto) 35 36 Return settingDto 37 38 End Function 39 40End Class
DTOのプロパティが1から12までの連番になっているので
settingDto.disp_color_ + 変数・・・で取得できそうなのですがうまくいきませんでした。
何か良い方法をご教授いただけると助かります。
RPT_0060SettingDto クラスの構造を大幅に見直すことはできるのですか? それができないと「どうしてもコードが冗長」というところはほとんど改善の余地はなさそうです。
大幅に変更できる、例えば、12 レコードの配列もしくは List<レコード> を RPT_0060SettingDto の要素にするよう見直すことができるなら、Linq to Enitities / Objects の Skip, Take とかを使えばかなりスマートにできそうな気がしますけど。
VBタグはこのサイトだとVB6以下を指し、VB.NETは機能・文法的にも別物になっているので、VBタグは削除してください。
質問者さん、無言ですが、回答が付いているのでそれらに対するフィードバックを書いてください。役に立った / 立たなかったぐらいはすぐ返せるのでは? 役に立たなかったならどこがダメだったかを書くとより期待に近い回答が出てくるかも。とにかく無言で放置は NG です。
皆様ご回答ありがとうございます。
休暇を取っていたもので回答に対する返答が遅れました。
Suferさんの回答の通り、Dtoの構造を見直してみようと思います。
その後どうなったのか進展を書いてください。
問題・課題が解決できたのであればベストアンサーを選んでこのスレッドはクローズしてください。
いつまでも無言で放置はしないようお願いします。
回答2件
あなたの回答
tips
プレビュー

