使用Linq执行SQL函数

Lah*_*hib 3 c# sql linq linq-to-sql

我在MSSQL 2005中创建了一个函数,我想使用linq运行此函数.我的功能有2个参数.定义如下:

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, -@ReceivedDate, 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
Run Code Online (Sandbox Code Playgroud)

如你所见,我有2个参数,我正在返回一个包含这些信息的表.但是我需要使用linq来执行这个函数.有人可以帮忙吗?谢谢

Dev*_*avi 6

我假设您正在使用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();
Run Code Online (Sandbox Code Playgroud)