i am fooling around with the new entity framework, and just for fun io wanted to convert all exsiting querys om a old site to new and shinny linq. But i cant really figure this query out. The smallest help would be awsome.
the query i try to convert.. could handle the foreach in my c# code now so if it is leave that out, it is more the nested selects and IN that is bugging me
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
any thoughts ?
Something like this. Hope this will help you to understand LINQ more effective 😉 :