如何:使用 LINQ 筛选查询结果(Visual Basic)

Language-Integrated 查询(LINQ)可以轻松访问数据库信息和执行查询。

以下示例演示如何创建一个新的应用程序,该应用程序对 SQL Server 数据库执行查询,并使用 Where 子句按特定值筛选结果。 有关详细信息,请参阅 Where 子句

本文中的示例使用 Northwind 示例数据库。 若要获取数据库,请参阅 下载示例数据库

注意

计算机可能会在以下说明中显示某些 Visual Studio 用户界面元素的不同名称或位置。 你拥有的 Visual Studio 版本以及所使用的设置决定了这些元素。 有关详细信息,请参阅个性化设置 IDE

创建与数据库的连接

  1. 在 Visual Studio 中,单击“视图” 菜单上的“/“数据库资源管理器”,打开“/数据库资源管理器

  2. 服务器资源管理器/ 中右键单击 数据连接,然后单击 添加连接

  3. 指定与 Northwind 示例数据库的有效连接。

添加一个包含 LINQ to SQL 文件的项目

  1. 在 Visual Studio 的“文件”菜单上,指向 “新建”,然后单击 项目。 选择 Visual Basic Windows 窗体应用程序 作为项目类型。

  2. 在“项目”菜单上,单击 “添加新项”。 选择“LINQ to SQL 类”项模板

  3. 将文件命名为 northwind.dbml。 单击 添加。 将为 northwind.dbml 文件打开对象关系设计器(O/R 设计器)。

将要查询的表添加到 O/R 设计器

  1. 服务器资源管理器/数据库资源管理器中,展开与 Northwind 数据库的连接。 展开 “表” 文件夹。

    如果已关闭 O/R 设计器,可以通过双击前面添加的 northwind.dbml 文件重新打开它。

  2. 单击“客户”表并将其拖到设计器的左窗格中。 单击“订单”表并将其拖到设计器的左窗格中。

    设计器为项目创建新的 CustomerOrder 对象。 请注意,设计器会自动检测表之间的关系,并为相关对象创建子属性。 例如,IntelliSense 将显示 Customer 对象具有与该客户相关的所有订单的 Orders 属性。

  3. 保存更改并关闭设计器。

  4. 保存项目。

添加代码以查询数据库并显示结果

  1. 工具箱中,将 DataGridView 控件拖到项目 Form1 的默认 Windows 窗体上。

  2. 双击 Form1,在窗体的 Load 事件中添加代码。

  3. 将表添加到 O/R 设计器时,设计器为项目添加了 DataContext 对象。 除了每个表的各个对象和集合外,此对象还包含必须访问这些表的代码。 项目的 DataContext 对象是根据 .dbml 文件的名称命名的。 对于此项目,DataContext 对象命名为 northwindDataContext

    可以在代码中创建 DataContext 实例,并查询 O/R 设计器指定的表。

    请在 Load 事件中添加以下代码,以查询作为数据上下文属性公开的表。 查询将筛选结果,仅返回位于 London的客户。

    Dim db As New northwindDataContext
    
    Dim customers_London = From cust In db.Customers
                           Where cust.City = "London"
                           Select cust.CustomerID, cust.CompanyName,
                                  OrderCount = cust.Orders.Count,
                                  cust.City, cust.Country
    
    DataGridView1.DataSource = customers_London
    
  4. 按 F5 运行项目并查看结果。

  5. 下面是可以尝试的其他一些筛选器。

    Dim companies_H = From cust In db.Customers
                      Where cust.Orders.Count > 0 And
                            cust.CompanyName.StartsWith("H")
                      Select cust.CustomerID, cust.CompanyName,
                             OrderCount = cust.Orders.Count,
                             cust.Country
    
    Dim customers_USA = From cust In db.Customers
                        Where cust.Orders.Count > 15 And
                              cust.Country = "USA"
                        Select cust.CustomerID, cust.CompanyName,
                               OrderCount = cust.Orders.Count,
                               cust.Country
    

另请参阅