2010-11-23 44 views
5

家伙 我如何能实现以下调用函数到SQL .NET 3.5

var productslist=from p in productsTable 
       select new product{Id=p.Id,Tax=myfunctions.calculateTax(p.price)}; 

我试图谷歌和碰到这个document来了。有没有另一种方式,我可以做到这一点,而不使用第三方dll

解决方案:将应用程序移动到.net 4.0(这实际上是支持,应该工作)。 Nway我坚持下面的解决方案暂时

+0

`calculateTax`是否是数据库中的存储过程/函数? – Gabe 2010-11-23 07:09:50

+0

没有。我的代码中有一个函数 – lafama 2010-11-23 07:10:45

回答

6

您是否试图调用本地函数,或在数据库中的一个?如果它是一个局部的功能,它是你做的最后一件事,这很容易 - 你只需要AsEnumerable()调用强制查询的其余部分在本地执行:

var products = productsTable.AsEnumerable() 
          .Select(p => new Product 
            { p.Id, Tax = CalculateTax(p.Price) }); 
11

LINQ到SQL无法神奇将任意 C#转换为TSQL;一个有限的选择 LINQ中可用的常用语法,但C#方法不起作用。

选项:

  • 重写功能作为一个UDF(在TSQL)和UDF映射到数据上下文(即拖动UDF到设计表面);使用myDataContext.MyUdf(args)在LINQ
  • 适用你的函数只有一次的数据是早在.NET的土地
  • 重新编写函数作为LINQ投影

我希望中间的选项是最简单的你场景。例如:

var productslist= 
      (from p in productsTable 
      select new {Id=p.Id,p.price}).AsEnumerable() 
      .Select(p => new {p.Id, Tax=myfunctions.calculateTax(p.price)}); 

AsEnumerable()场所“组合物” - 即它停止LINQ到SQL从试图理解在calculateTax TSQL的条款;从SQL中只检索到Idprice;然后,因为它处理每一行它应用第二个投影来计算税。