11

MVC EF を使用して、ID 以外のフィールドで結果をフィルタリングするにはどうすればよいですか?

return View(db.Drafts.Where(PublicationId=id));

PublicationId は Drafts テーブルの列です。

どんな助けでも大歓迎です。

4

3 に答える 3

17
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);
}
于 2012-04-18T15:49:32.317 に答える
4

あなたの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));
}
于 2012-04-18T15:55:44.170 に答える
2

ラムダに精通していますか?where 句のラムダでは、任意のプロパティを指定できます。

return View(db.Drafts.Where(d => d.SomeProperty == value));

また、モデルを実際の POCO モデルにするのではなく、ページに配信するデータをモデルに入れることも検討します。MVC モデルはディスプレイを駆動し、POCO モデルはデータを駆動します。

于 2012-04-18T15:52:08.360 に答える