LINQ调用数据库函数

  LINQ to SQL不但能够调用存储过程查询或操作数据库中的数据,而且还可以调用函数处理数据库中的数据。和LINQ to SQL调用存储过程一样,它也将为函数创建一个方法,并指定该方法调用的函数,以及传入的参数和返回值。下面的代码实例在LinqDBDataContext类中创建Fu_FilterUsername(string username)方法。该方法将调用Fu_FilterUsername函数,并返回该函数的执行结果(数据类型为string)。

[Function(Name="dbo.Fu_FilterUsername", IsComposable=true)]
public string Fu_FilterUsername([Parameter(Name="Username", DbType="VarChar(200)")] string username)
{
return ((string)(this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())),
username).ReturnValue));
}

  上述的Fu_FilterUsername(string username)方法调用了Fu_FilterUsername函数。该函数将username参数的值转换为相应的大写字母组成的字符串。它的程序代码如下:

CREATE FUNCTION dbo.Fu_FilterUsername
(
@Username varchar(200)
)
RETURNS varchar(200)
AS
BEGIN RETURN UPPER(@Username) END

  使用函数过滤数据的功能由Sample_08应用程序中的FunctionFilter.aspx页面实现,它的代码隐藏文件为FunctionFilter.aspx.aspx.cs。

1.创建FunctionFilter.aspx页面

  在FunctionFilter.aspx页面上创建一个GridView控件,ID属性的值为gvData。FunctionFilter.aspx页面的HTML设计代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FunctionFilter.aspx.cs"
Inherits="FunctionFilter" %>
<head runat="server"><title>使用函数过滤数据</title></head>
<asp:GridView ID="gvData" runat="server"></asp:GridView>

2.FunctionFilter.aspx页面初始化

  FunctionFilter.aspx页面初始化功能由其Page_Load(object sender, EventArgs e)事件实现。该事件调用ShowData()函数使用LINQ语句查询UserInfo表中的记录,并调用Fu_FilterUsername(string username)方法过滤记录的Username列的值,最终结果将显示在gvData控件中。具体步骤如下。

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

(2)使用LINQ查询UserInfo表中的数据,并调用Fu_FilterUsername(string username)方法过滤记录的Username列的值,即将Username列的值转换为相应的大写字母的字符串。查询结果保存在result变量中。

(3)把result变量设置为GridView控件gvData的数据源,并绑定该控件的数据,显示查询结果。

  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);
///获取所有角色
var result = from u in db.UserInfo
where u.ID > 10 && u.ID < 30
select new
{
ID = u.ID,
Username = db.Fu_FilterUsername(u.Username)
};
///绑定控件数据,并显示数据
gvData.DataSource = result;
gvData.DataBind();
}

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

 

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


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