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

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

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

我还会考虑将您传递到页面的数据放入模型中,而不是使模型成为实际的 POCO 模型。MVC 模型驱动显示,POCO 模型驱动数据。

于 2012-04-18T15:52:08.360 回答