2010-11-23 45 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;然後,因爲它處理每一行它應用第二個投影來計算稅。