LINQ存储过程多表查询

  本小节介绍使用存储过程查询多个表的数据的方法。

  下面的代码实例在LinqDBDataContext类中创建Pr_GetUserAndRole()方法。该方法将调用Pr_GetUserAndRole存储过程,并返回该存储过程的执行结果。由于Pr_GetUserAndRole存储过程返回两种类型的结果(UserInfo和Role表),因此,Pr_GetUserAndRole()方法使用ResultType属性指定结果的数据类型(UserInfo和Role),并指定返回结果的数据类型为IMultipleResults。

[Function(Name = "dbo.Pr_GetUserAndRole")]
[ResultType(typeof(UserInfo))]
[ResultType(typeof(Role))]
public IMultipleResults Pr_GetUserAndRole()
{
IExecuteResult result = this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod())));
return (IMultipleResults)(result.ReturnValue);
}

  上述的Pr_GetUserAndRole()方法调用了Pr_GetUserAndRole存储过程,该存储过程从LinqDB数据库的UserInfo和Role表中获取数据。它的程序代码如下:

CREATE PROCEDURE dbo.Pr_GetUserAndRole
AS
SELECT * FROM UserInfo
SELECT * FROM Role

  使用存储过程查询多表数据的功能由Sample_08应用程序中的ProcedureQueries.aspx页面实现,它的代码隐藏文件为ProcedureQueries.aspx.aspx.cs。

1.创建ProcedureQueries.aspx页面

  在ProcedureQueries.aspx页面上创建2个GridView控件,ID属性的值分别为gvUser和gvRole。ProcedureQueries.aspx页面的HTML设计代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ProcedureQueries.aspx.cs"
Inherits="ProcedureQueries" %>
<head runat="server"><title>使用存储过程查询多表数据</title></head>
<asp:GridView ID="gvUser" runat="server"></asp:GridView><br />
<asp:GridView ID="gvRole" runat="server"></asp:GridView>

2.ProcedureQueries.aspx页面初始化

  ProcedureQueries.aspx页面初始化功能由其Page_Load(object sender, EventArgs e)事件实现。该事件调用ShowData()函数使用LINQ执行Pr_GetCategorys存储过程查询UserInfo和Role表中的记录,并分别显示在gvUser和gvRole控件中。具体步骤如下。

(1)创建LinqDBDataContext类的实例db。

(2)调用Pr_GetUserAndRole()方法执行Pr_GetUserAndRole存储过程获取数据,结果保存为result(数据类型为IMultipleResults)变量。

(3)使用GetResult<UserInfo>()方法获取result变量中UserInfo表中的数据,并使用LINQ查询ID列的值小于10的记录,查询结果保存在users变量中。

(4)使用GetResult<Role>()方法获取result变量中Role表中的数据,并保存在roles变量中。

(5)分别把users和roles变量设置为gvUser和gvRole控件的数据源,并绑定控件的数据,显示查询结果。

  Page_Load(object sender, EventArgs e)事件和ShowData()函数的程序代码如下:

using System.Data.Linq;
using System.Collections.Generic;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack){ShowData();}
}
private void ShowData()
{   ///创建LinqDB数据库的数据上下文的实例
LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);
///获取所有数据
IMultipleResults result = db.Pr_GetUserAndRole();
///获取用户信息
IEnumerable<UserInfo> users = from u in result.GetResult<UserInfo>()
where u.ID < 10
select u;
///获取角色信息
IEnumerable<Role> roles = result.GetResult<Role>();
///绑定控件数据,并显示
gvUser.DataSource = users;
gvUser.DataBind();
gvRole.DataSource = roles;
gvRole.DataBind();
}

  把ProcedureQueries.aspx页面设置为Sample_08应用程序的起始页面,并运行Sample_08应用程序。ProcedureQueries.aspx页面的初始化界面如图所示,此时,该页面显示UserInfo和Role表中的记录。

 

加支付宝好友偷能量挖...


评论(0)网络
阅读(136)喜欢(0)asp.net-linq