如何:使用 LINQ 对数据进行计数、求和与求平均值计算 (Visual Basic)
使用语言集成查询 (LINQ) 可以方便地访问数据库信息和执行查询。
下面的示例演示如何创建对 SQL Server 数据库执行查询的新应用程序。 该示例使用 Aggregate 和 Group By 子句对结果进行计数、求和与求平均值计算。 有关更多信息,请参见 Aggregate 子句 (Visual Basic) 和 Group By 子句 (Visual Basic)。
本主题中的示例使用 Northwind 示例数据库。 如果没有在开发计算机中安装 Northwind 示例数据库,可以从 Microsoft Download Center(Microsoft 下载中心)网站下载该数据库。 有关说明,请参见下载示例数据库。
备注
以下说明中的某些 Visual Studio 用户界面元素在你计算机上的名称或显示位置可能有所不同。这些元素取决于你所使用的 Visual Studio 版本和你所使用的设置。有关详细信息,请参阅 在 Visual Studio 中自定义开发设置。
创建与数据库的连接
在 Visual Studio 中,通过在**“视图”菜单上单击“服务器资源管理器”/“数据库资源管理器”,打开“服务器资源管理器”/“数据库资源管理器”**。
在**“服务器资源管理器”/“数据库资源管理器”中,右击“数据连接”,然后单击“添加连接”**。
指定与 Northwind 示例数据库的有效连接。
添加包含 LINQ to SQL 文件的项目
在 Visual Studio 中的**“文件”菜单上,指向“新建”,然后单击“项目”。 选择 Visual Basic“Windows 窗体应用程序”**作为项目类型。
在**“项目”菜单上,单击“添加新项”。 选择“LINQ to SQL 类”**项模板。
将文件命名为 northwind.dbml。 单击**“添加”**。 为 northwind.dbml 文件打开对象关系设计器(O/R 设计器)。
将要查询的表添加到 O/R 设计器
在**“服务器资源管理器”/“数据库资源管理器”中,展开与 Northwind 数据库的连接。 展开“表”**文件夹。
如果已经关闭 O/R 设计器,可以通过双击先前添加的 northwind.dbml 文件重新将其打开。
单击 Customers 表并将它拖到设计器的左窗格上。 单击 Orders 表并将它拖到设计器的左窗格上。
设计器为项目创建新的 Customer 和 Order 对象。 请注意,设计器会自动检测表之间的关系并为相关对象创建子属性。 例如,IntelliSense 会显示 Customer 对象具有一个 Orders 属性,该属性对应于所有与该客户相关的订单。
保存所做的更改并关闭设计器。
保存您的项目。
添加用于查询数据库和显示结果的代码
从**“工具箱”**中,将 DataGridView 控件拖到项目的默认 Windows 窗体 Form1 上。
双击 Form1,以便将代码添加到该窗体的 Load 事件。
将表添加到 O/R 设计器后,设计器会为项目添加一个 DataContext 对象。 此对象包含访问这些表以及访问每个表的单个对象和集合所必需的代码。 项目的 DataContext 对象是根据 .dbml 文件的名称命名的。 对于此项目,DataContext 对象被命名为 northwindDataContext。
可以在代码中创建 DataContext 的实例并查询通过 O/R 设计器指定的表。
将下面的代码添加到 Load 事件以查询作为 DataContext 的属性公开的表,并对结果进行计数、求和与求平均值计算。 该示例使用 Aggregate 子句查询单个结果,使用 Group By 子句显示分组结果的平均值。
Dim db As New northwindDataContext Dim msg = "" Dim londonCustomerCount = Aggregate cust In db.Customers Where cust.City = "London" Into Count() msg &= "Count of London Customers: " & londonCustomerCount & vbCrLf Dim averageOrderCount = Aggregate cust In db.Customers Where cust.City = "London" Into Average(cust.Orders.Count) msg &= "Average number of Orders per customer: " & averageOrderCount & vbCrLf Dim venezuelaTotalOrders = Aggregate cust In db.Customers Where cust.Country = "Venezuela" Into Sum(cust.Orders.Count) msg &= "Total number of orders from Customers in Venezuela: " & venezuelaTotalOrders & vbCrLf MsgBox(msg) Dim averageCustomersByCity = From cust In db.Customers Group By cust.City Into Average(cust.Orders.Count) Order By Average DataGridView1.DataSource = averageCustomersByCity
按 F5 运行项目并查看结果。