2012-04-18 3 views
9

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

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

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

何か助けていただければ幸いです。

答えて

15
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); 
} 
+0

+1:私は 'SingleOrDefault'に過負荷があることを知らなかった。 –

2

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

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

モデルを実際のPOCOモデルにするのではなく、モデルのページにデータを渡すことも考えます。 MVCモデルはディスプレイを駆動し、POCOモデルはデータを駆動します。

+0

ありがとうございます。それはまた役に立つ答えです。 – alockrem

+1

それでは、それをアップウィートするのはどうですか? :) – mccow002

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)); 
} 
+0

ありがとうございました。それはまた役に立つ答えです。 – alockrem

+0

d変数はどこから来ますか?その手紙は重要ですか?よろしくお願いします。 –

+0

@DannyRancherラムダ式です。手紙は重要ではありませんが、スコープに関するいくつかの制限があります。 – Dismissile

関連する問題