【问题标题】:Using Where Clause in MVC Controller Created by Entity Framework在实体框架创建的 MVC 控制器中使用 Where 子句
【发布时间】:2017-05-05 00:40:13
【问题描述】:

我使用 ADO.NET 实体数据模型(来自数据库的代码优先)从现有数据库创建模型,然后构建控制器和视图。在我的控制器中,我有:

' GET: Cities
Function Index() As ActionResult
    Return View(db.Cities.SortBy("CityName").ToList())
End Function

如何将 CountyID 传递给控制器​​,以便仅列出一个县的城市?如果我使用 SQL 查询,我会这样写:

SELECT * FROM City WHERE CountyID = 1

我试过了:

Function Index(ByVal id As Integer?) As ActionResult
    Return View(db.Cities.Where(db.Cities.CountyID.Equals(id)).SortBy("CityName").ToList())
End Function

但对于“db.Cities.CountyID”,它会抱怨“'CountyID' 不是 'DbSet(Of City)' 的成员”

我找到了一些使用 lambda 表达式的示例,但我不完全确定是否可以在 VBScript 中使用这些示例。

Function Index(ByVal id As Integer?) As ActionResult
    Return View(db.Cities.Where(c >= c.CountyID = id).SortBy("CityName").ToList())
End Function

这给了我一个错误,“'c' is not declared”

我找不到任何很好的例子来说明如何做到这一点。我是 MVC 的新手,显然没有足够的知识来提出正确的问题。

【问题讨论】:

    标签: asp.net-mvc vb.net entity-framework linq


    【解决方案1】:

    您正在编写 VB.Net,而不是 VBScript。这是一个巨大的差异,这也意味着有 lambda 表达式:-)

    看来您之前已经找到了一些 C# 示例... VB.Net 中 lambda 表达式的语法如下所示:

    Function Index(ByVal id As Integer?) As ActionResult
        Return View(db.Cities.Where(Function(c) c.CountyID = id).OrderBy("CityName").ToList())
    End Function
    

    【讨论】:

    • 谢谢。当我搜索时,我在 C# 上找到的东西比 VB.Net 上的要多。我可能会在完成之前学习两者。
    【解决方案2】:

    @Marc 的回答涵盖了 VB.NET 的正确 lambda 表达式语法,但您也可以使用 LINQ 查询语法。根据您的个人喜好,这有时会减少输入,并且可能更具可读性(尽管在查询语法中有些事情是您无法做到的)。

    Function Index(ByVal id As Integer?) As ActionResult
        Return View((From c In db.Cities Where c.CountyID = id Order By c.CityName).ToList())
    End Function
    

    【讨论】:

      猜你喜欢
      • 2011-12-31
      • 1970-01-01
      • 2019-10-13
      • 2010-11-08
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多