LINQ には次のような状況があります: オブジェクト (ブログの「投稿」) があり、さまざまな値を取ることができる「ステータス」フィールドがあり、これらすべての値をリストするテーブルがあります (このテーブルには Id と Desc しかありません)。 .
これで、両方のテーブル間のリレーションシップが作成されたので、モデルでは、Post.Status は int ではなく、「PostStatus」のインスタンスになります。
したがって、Post のステータスをたとえば 20 に設定したい場合、フィールドを 20 に設定するだけではなく、割り当てる PostStatus のインスタンスが必要です。これらのステータス値はすべてロジックでハードコーディングされているため、コードに「20」をハードコーディングしても問題ありません。
これを行うより良い方法はありますか?
switch (Action) {
case "Ignore":
post.PostStatus = (from s in db.PostStatus where s.Id == 90 select s).First();
break;
case "Assign":
post.PostStatus = (from s in db.PostStatus where s.Id == 20 select s).First();
break;
case "MarkDone":
post.PostStatus = (from s in db.PostStatus where s.Id == 30 select s).First();
break;
case "MarkPublished":
post.PostStatus = (from s in db.PostStatus where s.Id == 40 select s).First();
post.Public = true;
break;
}
正直なところ、私はこのコードが嫌いです。まず第一に、PostStatus インスタンスを取得するために不必要に DB にクエリを実行するためですが、ほとんどの場合、非常に冗長であるためです。
これを行うより良い方法はありますか?
ありがとう!
ダニエル