精通LINQ--8.2.5 使用存储过程查询多表数据

  8.2.4小节中已经介绍了使用存储过程查询单表(Category)数据的方法,本小节介绍使用存储过程查询多个表的数据的方法。

下面的代码实例在LinqDBDataContext类中创建Pr_GetUserAndRole()方法。该方法将调用Pr_GetUserAndRole存储过程,并返回该存储过程的执行结果。由于Pr_GetUserAndRole存储过程返回两种类型的结果(UserInfoRole表),因此,Pr_GetUserAndRole()方法使用ResultType属性指定结果的数据类型(UserInfoRole),并指定返回结果的数据类型为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数据库的UserInfoRole表中获取数据。它的程序代码如下:

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页面上创建2GridView控件,ID属性的值分别为gvUsergvRoleProcedureQueries.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>

2ProcedureQueries.aspx页面初始化

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

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)分别把usersroles变量设置为gvUsergvRole控件的数据源,并绑定控件的数据,显示查询结果。

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页面的初始化界面如图所示,此时,该页面显示UserInfoRole表中的记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值