MVC EF を使用して、ID 以外のフィールドで結果をフィルタリングするにはどうすればよいですか?
return View(db.Drafts.Where(PublicationId=id));
PublicationId は Drafts テーブルの列です。
どんな助けでも大歓迎です。
MVC EF を使用して、ID 以外のフィールドで結果をフィルタリングするにはどうすればよいですか?
return View(db.Drafts.Where(PublicationId=id));
PublicationId は Drafts テーブルの列です。
どんな助けでも大歓迎です。
public ActionResult Index(int id)
{
var drafts = db.Drafts.Where(d => d.PublicationId == id).ToList();
return View(drafts);
}
または、単一のドラフトが必要な場合(IDは通常一意です):
public ActionResult Index(int id)
{
var draft = db.Drafts.SingleOrDefault(d => d.PublicationId == id);
return View(draft);
}
あなたのDraft
クラスがどのように見えるかはわかりませんが、次のようになっているとしましょう。
public class Draft
{
public int Id { get; set; }
public int PublicationId { get; set; }
public string Name { get; set; }
}
次のようなクエリを作成できます。
return View(db.Drafts.Where(d => d.Name == "foo"));
これは、「foo」という名前のドラフトのみを返します。これだけではおそらく役に立たないでしょう。コントローラにデータ(クエリ文字列、フォーム値、ルート値など)を渡すことで、これを制御することをお勧めします。
public ActionResult Index(int id, string filter)
{
return View(db.Drafts.Where(d => d.Name == filter));
}
または、複数のプロパティでフィルタリングすることもできます。
public ActionResult Index(int id, string filter)
{
return View(db.Drafts.Where(d => d.Name == filter && d.PublicationId == id));
}
ラムダに精通していますか?where 句のラムダでは、任意のプロパティを指定できます。
return View(db.Drafts.Where(d => d.SomeProperty == value));
また、モデルを実際の POCO モデルにするのではなく、ページに配信するデータをモデルに入れることも検討します。MVC モデルはディスプレイを駆動し、POCO モデルはデータを駆動します。