2011-02-25 5 views
1

LINQ에서 저장 프로 시저를 실행하려고합니다. SQL Server에서 실행하면 정수 필드와 부동 소수점 필드와 같은 여러 필드가 반환됩니다. 저장된 PROC 여기linq 및 저장 프로 시저

var meterReadings = _database.MetricDataReport("20101127"); 

그리고있다 :

ALTER PROCEDURE [dbo].[MetricDataReport] 
@FormDate VARCHAR(8) 
AS 
SET NOCOUNT ON 



/*Table To Hold Finished RecordSet*/ 
CREATE TABLE #OutputTable 
(
    PkMetricMeterID INT, 
    FkSiteID  INT, 
    FourWeekReading FLOAT, 
    LastWeekReading FLOAT, 
    ThisWeekReading FLOAT, 
    pkMeterID  INT, 
    DecimalPlaces INT 

) 

CREATE TABLE #WorkingTable 
(
    PkMetricMeterID INT, 
    FkSiteID  INT, 
    FormDate  DATETIME, 
    Reading   FLOAT, 
    pkMeterID  INT, 
    DecimalPlaces INT 
) 

----------------------------------- 
--- Process Physical Meters --- 
----------------------------------- 
    INSERT INTO #WorkingTable (PkMetricMeterID,FkSiteID,FormDate,Reading,pkMeterID,DecimalPlaces) 
    SELECT 
     luMetricMeters.PkMetricMeterID, 
     LuMetricMeterList.FkSiteID, 
     GetReadingsAndPriceLite.FormDate, 
     GetReadingsAndPriceLite.CalculatedConsumption * GetReadingsAndPriceLite.ConversionFactor, 
     luMetricMeterList.pkMeterID,    
     Meters.DecimalPlaces  
    FROM 
     luMetricMeters 
    INNER JOIN 
     luMetricMeterList ON luMetricMeterList.PkMetricMeterID = luMetricMeters.PkMetricMeterID 
    INNER JOIN 
     GetReadingsAndPriceLite ON GetReadingsAndPriceLite.pkMeterID = luMetricMeterList.pkMeterID 
    INNER JOIN 
     Meters ON Meters.PkMeterID = luMetricMeterList.pkMeterID 
    WHERE 
     GetReadingsAndPriceLite.FormDate <= @FormDate AND GetReadingsAndPriceLite.FormDate >= DATEADD(wk,-4,@FormDate) 
-------------------------------------------- 
--- Process Virtual Meters (NON KPI) --- 
-------------------------------------------- 

---Check To See If Meter Needs Updating 
DECLARE @CurrentMeterID INT 
DECLARE MeterCursor Cursor FAST_FORWARD FOR 
    SELECT 
     luMetricMeterList.pkMeterID 
    FROM 
     LuMetricMeters 
    INNER JOIN 
     luMetricMeterList ON luMetricMeterList.PkMetricMeterID = luMetricMeters.PkMetricMeterID 
    INNER JOIN 
     VirtualMeterReadings ON VirtualMeterReadings.MeterID = luMetricMeterList.pkMeterID 
    WHERE 
     VirtualMeterReadings.UpdateFlag = 1 
OPEN MeterCursor 
FETCH NEXT FROM MeterCursor INTO @CurrentMeterID 
WHILE @@Fetch_Status=0 
BEGIN 
    EXEC UpdateVirtualReadings @CurrentMeterID 
    FETCH NEXT FROM MeterCursor INTO @CurrentMeterID 
END 
CLOSE MeterCursor 
DEALLOCATE MeterCursor 


INSERT INTO #WorkingTable (PkMetricMeterID,FkSiteID,FormDate,Reading,pkMeterID,DecimalPlaces) 
    SELECT 
     luMetricMeters.PkMetricMeterID, 
     LuMetricMeterList.FkSiteID, 
     VirtualMeterReadings.FormDate, 
     VirtualMeterReadings.Reading, 
     LuMetricMeterList.pkMeterID, 
     Meters.DecimalPlaces    
    FROM 
     luMetricMeters 
    INNER JOIN 
     luMetricMeterList ON luMetricMeterList.PkMetricMeterID = luMetricMeters.PkMetricMeterID 
    INNER JOIN 
     VirtualMeterReadings ON VirtualMeterReadings.MeterID = luMetricMeterList.pkMeterID 
    INNER JOIN 
     Meters ON Meters.PkMeterID = luMetricMeterList.pkMeterID 
    WHERE 
     VirtualMeterReadings.FormDate <= @FormDate AND VirtualMeterReadings.FormDate >= DATEADD(wk,-4,@FormDate) 

SET NOCOUNT OFF 

SELECT DISTINCT 
    [#WorkingTable].PkMetricMeterID, 
    #WorkingTable.FkSiteID, 
    ThisWeekReading = (SELECT TOP 1 Reading FROM #WorkingTable WorkingTable1 WHERE WorkingTable1.PkMetricMeterID = #WorkingTable.PkMetricMeterID AND [#WorkingTable].FkSiteID = [WorkingTable1].FkSiteID ANd workingTable1.FORMDATE = @FormDate), 
    LastWeekReading = (SELECT TOP 1 Reading FROM #WorkingTable WorkingTable1 WHERE WorkingTable1.PkMetricMeterID = #WorkingTable.PkMetricMeterID AND [#WorkingTable].FkSiteID = [WorkingTable1].FkSiteID ANd workingTable1.FORMDATE = DATEADD(d,-7,@FormDate)), 
    FourWeekReading = (SELECT AVG(Reading) FROM #WorkingTable WorkingTable1 WHERE WorkingTable1.PkMetricMeterID = #WorkingTable.PkMetricMeterID AND [#WorkingTable].FkSiteID = [WorkingTable1].FkSiteID), 
    #WorkingTable.pkMeterID, 
    #WorkingTable.DecimalPlaces 
FROM 
    [#WorkingTable] 
ORDER BY  
    [#WorkingTable].PkMetricMeterID, 
    [#WorkingTable].FkSiteID 

답변

0

나는 '돈을 내가 LINQ에 저장 프로 시저를 호출 할 때, 그것은 반환 모든 내가 저장 프로 시저를 호출 오전 방법은 다음과 0이다 문제가 무엇인지 알기에는 이것에 대해 충분히 알고 있지만 훨씬 간단한 저장 프로 시저를 사용하여이 작업을 먼저 수행하고 싶을 수도 있습니다. 예 : 단순한 목록을 반환하는 것.

또한 Linq to Sql과 함께 Stored Procs를 사용하는 경우 ScottGu's blog post을 살펴보십시오.