4

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

ご覧のとおり、2つのパラメーターがあり、情報を含むテーブルを返しています。ただし、この関数を実行するにはlinqを使用する必要があります。誰か助けてもらえますか?ありがとう

4

1 に答える 1

6

dbml(linq to sql)ファイルを使用していると想定しています。

ユーザー定義関数をVisualStudioのサーバーエクスプローラーからdbmlにドラッグドロップします。

次に、dbmlのdatacontextオブジェクトから、関数を直接呼び出すことができます。

たとえば、dbmlファイル名がxyz.dbmlの場合、変更しない限り、datacontextオブジェクトの名前は「XyzDataContext」になります。

次に、これを試してください。

XyzDataContext db = new XyzDataContext();
List<Fn_GetNoLocationAddressResult> = db.Fn_GetNoLocationAddress("site", 25).ToList();
于 2012-11-07T07:53:54.650 に答える