我在玩弄新的實體框架,只是爲了好玩io想把所有現存的查詢都轉換成新的和靈巧的linq。但我不能真正把這個問題看出來。最小的幫助將會是令人厭惡的。將SQL轉換爲Linq
查詢我嘗試轉換。現在可以處理在我的C#代碼的foreach所以如果離開了這一點,它更多的是嵌套的選擇,並在被竊聽我
DECLARE @Begin DateTime, @End DateTime, @date DateTime, @partnerId int
Set @partnerId = 1
Set @Begin = Cast('2010-01-01' as DateTime)
Set @End = Cast(Dateadd(month, 17, @Begin) as DateTime)
Set @date = @Begin
SET NOCOUNT ON
WHILE (@date <= @End)
BEGIN
SELECT
[PackageId],
@date AS [Date],
[Name],
(ISNULL((SELECT [ReportId] FROM [Uniferon_Reports] WHERE [FK_PartnerId] = @partnerId AND [FK_PackageId] = [Uniferon_Packages].[PackageId] AND [Date] = @date), 0)) AS [ReportId],
(ISNULL((SELECT [UnitsForecast] FROM [Uniferon_Reports] WHERE [FK_PartnerId] = @partnerId AND [FK_PackageId] = [Uniferon_Packages].[PackageId] AND [Date] = @date), 0)) AS [UnitsForecast],
(ISNULL((SELECT [UnitsActual] FROM [Uniferon_Reports] WHERE [FK_PartnerId] = @partnerId AND [FK_PackageId] = [Uniferon_Packages].[PackageId] AND [Date] = @date), 0)) AS [UnitsActual],
(ISNULL((SELECT [RevenueForecast] FROM [Uniferon_Reports] WHERE [FK_PartnerId] = @partnerId AND [FK_PackageId] = [Uniferon_Packages].[PackageId] AND [Date] = @date), 0)) AS [RevenueForecast],
(ISNULL((SELECT [RevenueActual] FROM [Uniferon_Reports] WHERE [FK_PartnerId] = @partnerId AND [FK_PackageId] = [Uniferon_Packages].[PackageId] AND [Date] = @date), 0)) AS [RevenueActual],
(ISNULL((SELECT [UnitsInStock] FROM [Uniferon_Reports] WHERE [FK_PartnerId] = @partnerId AND [FK_PackageId] = [Uniferon_Packages].[PackageId] AND [Date] = @date), 0)) AS [UnitsInStock]
FROM
[Uniferon_Packages][Uniferon_Packages]
WHERE
[PackageId] IN
(SELECT [FK_PackageId] FROM [Uniferon_Partners_Packages_Relation] WHERE [FK_PartnerId] = @partnerId AND [StartDate] <= @date AND ([EndDate] >= @date OR [EndDate] IS NULL))
Set @date = DateAdd(month, 1, @date)
END
SET NOCOUNT OFF
任何想法?
爲什麼你需要改變它?使用多個工具是可以的......如果LINQ/EF很難做到......不要使用它們,IMO。尤其是在看起來像報告查詢的情況下,您可能不需要完整的ORM。你有沒有考慮過使用簡單的東西?原始的ADO.NET? Micro-ORM如「dapper」?我不是故意的 - 我的意思是運行這個現有的和可用的TSQL ... –