您的位置:首页 > 数据库

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

2010-10-22 23:45 676 查看
此示例代码主要示范如何将用户在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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: