[代码]如何使用用户定义的表值函数(LINQ to SQL)

此示例代码主要示范如何将用户在SQL Server中定义的表值函数映射到对象模型中的函数,并是示范了如何调用这样的映射函数。

示范中用到的表值函数定义如下:
CREATE FUNCTION ProductsCostingMoreThan(@Cost money) RETURNS TABLE AS RETURN SELECT ProductID, UnitPrice FROM Products WHERE UnitPrice > @Cost
使用如下的方式来映射表值函数,特别需要注意的是,此次返回的是IQueryable<TEntity>,并且其内部调用的是DataContext.CreateMethodCallQuery(),而不是DataContext.ExecuteMethodCall()
[Function(Name="dbo.ProductsCostingMoreThan", IsComposable=true)] public IQueryable<ProductsCostingMoreThanResult> ProductsCostingMoreThan( [Parameter(Name="Cost", DbType="Money")] System.Nullable<decimal> cost) { return this.CreateMethodCallQuery<ProductsCostingMoreThanResult>(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), cost); }
可以使用类似如下的方式调用上面创建的映射函数。本示例中是将表值函数的查询结果作为LINQ查询的数据源来使用,并且进行了链接查询。
NorthwindDataContext db = new NorthwindDataContext(@"C:/LINQ/Northwind.mdf"); var PartialProducts = from P1 in db.ProductsCostingMoreThan(80.50m) join P2 in db.Products on P1.ProductID equals P2.ProductID select new { P1.ProductID, P2.UnitPrice }; foreach (var ProductObject in PartialProducts) { Console.WriteLine("ProductID={0} UnitPrice={1}", ProductObject.ProductID, ProductObject.UnitPrice); Thread.Sleep(100); }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值