Linq to Oracle 使用教程(六)将数据库的函数映射到方法

点击这里返回目录

 

创建自定义函数和存储过程

打开 ALinq 安装目录下的 Oracle(ODP)Samples 解决方案,然后运行 Sample3_StoreProcedure 项目,点击 "Click to Create Procedures" 按钮,当然,在运行前你得先修改连接字符串,如果你还没有修改的话。在创建完存储过程后,请将所它们编译。

将数据库的函数映射到方法

一、简单函数映射

我们首先来进行映射的是 Upper 函数,这是一个将字符串转为大写的函数,这个函数的一个输入字符串参数,并且返回也是字符串。

应该我们可以创建一个如下的方法映射到该函数去。

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
public partial class NorthwindDataContext : ALinq.DataContext
{
[ALinq.Mapping.Function(IsComposable
= true , Name = " UPPER " )]
public string Upper(
[ALinq.Mapping.Parameter(DbType
= " VarChar " )]
string text)
{
throw new NotSupportedException();
}
}

下面我们来运行一段代码,测试一下。 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
static void Main( string [] args)
{
var dc
= new NorthwindDataContext()
{
Log
= Console.Out
};

var names
= dc.Products.Select(o => dc.Upper(o.Productname)).ToList();
foreach (var name in names)
Console.WriteLine(name);
}

运行结果:

2010120319501844.jpg

二、返回结果集的函数映射

 在 Server Explorer 面板中,展开 NORTHWIND 连接,并找到 Packages->PKG2->GET_ALL_CATEGORIES 函数。

2010120410471184.jpg

我们现在来将它映谢到 DataContext 类的方法。双击打开,代码如下:

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
PACKAGE BODY PKG2 IS
FUNCTION GET_ALL_CATEGORIES RETURN MYTYPE IS
MYCS MYTYPE;
BEGIN
OPEN MYCS FOR SELECT CATEGORYID, CATEGORYNAME, DESCRIPTION
FROM CATEGORIES;
RETURN MYCS;
END GET_ALL_CATEGORIES;
END PKG2;

从代码我们可以看出,它是返回一个数据集,并且是没有参数的,对于返回单一类型的结果集,我们要使用的是 ALinq.ISingleResult<T> 类型。方法定义如下:

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
public partial class NorthwindDataContext : ALinq.DataContext
{
[ALinq.Mapping.Function(Name
= " PKG2.GET_ALL_CATEGORIES " )]
public ALinq.ISingleResult < Category > GetAllCategories()
{
var result
= ExecuteMethodCall( this , (MethodInfo)MethodBase.GetCurrentMethod());
return (ISingleResult < Category > )result.ReturnValue;
}
}

调用该方法的代码:

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
static void Main( string [] args)
{
var dc
= new NorthwindDataContext() { Log = Console.Out };

var categories
= dc.GetAllCategories();
foreach (var category in categories)
Console.WriteLine(
" {0} {1} " , category.Categoryid, category.Categoryname);
}

运行结果:

2010120409245117.jpg

点击这里返回目录

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值