如何在MVC中使用where子句ef

时间:2012-04-18 15:47:48

标签: asp.net-mvc entity-framework

使用MVC EF,如何通过id?

以外的字段过滤结果?
return View(db.Drafts.Where(PublicationId=id));

PublicationId是草稿表中的一列。

感谢任何帮助。

3 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分: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));
}

答案 2 :(得分:2)

你熟悉lambdas吗?在where子句的lambda中,您可以指定任何您想要的属性。

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

我还会考虑将您提供的数据放入模型中的页面,而不是将模型作为实际的POCO模型。 MVC模型驱动显示器,POCO模型驱动您的数据。