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表中的记录。
加支付宝好友偷能量挖...