2012-11-07 54 views
3

我在MSSQL 2005中創建了一個函數,我想用linq來運行這個函數。我的功能有2個參數。定義如下:使用Linq執行SQL函數

USE [MobileGateway] 
GO 
/****** Object: UserDefinedFunction [dbo].[Fn_GetNoLocationAddress] Script Date: 11/07/2012 08:27:58 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER FUNCTION [dbo].[Fn_GetNoLocationAddress] 
( 
    -- Add the parameters for the function here 
    @Site nvarchar(255), 
    @ReceivedDate int 
) 
RETURNS @noLocationAddress TABLE (

RequestID int NOT NULL, 
Barcode varchar(50) NOT NULL, 
AdrID int NOT NULL, 
Name varchar(50) NOT NULL, 
Street varchar(50) NOT NULL, 
HouseNo varchar(4) NOT NULL, 
Postal varchar(8) NOT NULL, 
City varchar(50) NOT NULL, 
Country varchar(50) NOT NULL, 
Latitude varchar(50) NOT NULL, 
Longitude varchar(50) NOT NULL, 
ReveivedDate datetime NOT NULL 
) 
AS 
BEGIN 
    -- Add the SELECT statement with parameter references here 
INSERT INTO @noLocationAddress 
SELECT  TOP (100) PERCENT Request1.RequestID, TrackIT.dbo.Sending.Barcode, TrackIT.dbo.Address_View.AdrID, TrackIT.dbo.Address_View.Name, 
         TrackIT.dbo.Address_View.Street, TrackIT.dbo.Address_View.HouseNo, TrackIT.dbo.Address_View.Postal, TrackIT.dbo.Address_View.City, 
         TrackIT.dbo.Address_View.Country, Request1.Latitude, Request1.Longitude, Request1.ReceivedDate 
FROM   (SELECT DISTINCT RequestID, LTRIM([Content]) AS Barcode, Latitude, Longitude, ReceivedDate 
         FROM   dbo.RequestWithLocation 
         WHERE  (Site LIKE @Site) AND ([Content] <> '') AND (AddressID = '0') AND (ReceivedDate > DATEADD(day, [email protected], GETDATE()))) AS Request1 INNER JOIN 
         TrackIT.dbo.Sending ON Request1.Barcode = TrackIT.dbo.Sending.Barcode INNER JOIN 
         TrackIT.dbo.Address_View ON TrackIT.dbo.Sending.DeliveryAdrID = TrackIT.dbo.Address_View.AdrID 

ORDER BY TrackIT.dbo.Address_View.AdrID 

RETURN 

END 

正如你所看到的我有2個參數,我回來了一個表的信息。但我需要使用linq來執行這個功能。 任何人都可以幫忙嗎?謝謝

回答

5

我假設你正在使用dbml(linq to sql)文件。

將Visual Studio中服務器資源管理器中的用戶定義函數拖放到您的dbml中。

然後從您的dbml的datacontext對象中直接調用該函數。

例如,如果您的dbml文件名是xyz.dbml,那麼您的datacontext對象的名稱應該是'XyzDataContext',除非您已更改它。

然後試試這個。

XyzDataContext db = new XyzDataContext(); 
List<Fn_GetNoLocationAddressResult> = db.Fn_GetNoLocationAddress("site", 25).ToList();