【C#】エンティティクラスから一部のプロパティのみをCSV出力したい(カスタム属性使用)

 エンティティクラスのプロパティにカスタム属性を付けて、その属性を基にCSVへ出力をします。

また、カスタム属性には、出力順とヘッダーテキストを設定できるようにします。


①カスタム属性クラスをつくります。

今回のカスタム属性はプロパティ向けなので、ターゲットをAttributeTargets.Propertyに。

多重設定を許さないので、AllowMultiple = falseに。

継承は必要ないので、Inherited = falseに。


②エンティティクラス(適当)を用意して、出力したいプロパティにカスタム属性を設定します。

※超適当でごめんなさい。


③動作確認のため、エンティティクラスに適当に値を設定します。

※ここからは、エンティティクラスを使用する任意のクラス、処理内に記載しています。


④カスタム属性が設定されたプロパティのみを抽出して、出力順を昇順に並び替えます。

もう少しスマートなLinqの使い方が… .Where(...).OrderBy(...).Select(...)で書けばよいと思うの。


⑤カスタム属性のヘッダーテキストと出力データを抽出します。

※ここでは、エンティティの各プロパティもList<string>として格納していますが、お好きな様にしてください。


⑥取り出した値をカンマ区切りでテキストファイルに出力します。

ソースは特別載せませんが、今回はList<List<string>>で渡していますので、1レコードの文字列リストをカンマでつないで1行として出力をしています。

※参考:出力結果


※動作確認はVS2022(preview)/.Net6(preview)です。


コメント

このブログの人気の投稿

【C#】ComboBoxのデータソースにディクショナリを設定したい

【C#】いつもLog4netの設定を忘れる

【C#】2つのコンボボックスを使って、コンボボックスソースを切り替えたい