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

更新:2007 年 11 月

使用语言集成查询 (LINQ) 可以方便地访问数据库信息和执行查询。

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

本主题中的示例使用 Northwind 示例数据库。如果没有在开发计算机中安装 Northwind 示例数据库,可以从 Microsoft Download Center(Microsoft 下载中心)网站下载该数据库。有关说明,请参见下载示例数据库 (LINQ to SQL)

说明:

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您使用的 Visual Studio 版本及设置。有关更多信息,请参见Visual Studio 设置

创建与数据库的连接

  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. 单击 Customers 表并将它拖到设计器的左窗格上。单击 Orders 表并将它拖到设计器的左窗格上。

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

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

  4. 保存您的项目。

添加用于查询数据库和显示结果的代码

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

  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
    

请参见

任务

演练:创建 LINQ to SQL 类(O/R 设计器)

概念

DataContext 方法(O/R 设计器)

其他资源

Visual Basic 中的 LINQ

查询 (Visual Basic)

LINQ to SQL