Привет Игорь,
Поигрался над прототипом для клиента, и переписал пару выборок с хранимок на Linq2db (SQL Server, Azure SQL).
Сиквел генерится просто чудестно, но есть некоторые вещи которых не хватает или я не нашел
Хотелось бы иметь возможнось вызывать всторенную фунцию ISNULL(SomeField, 0)
Не нашел возможности сделать BETWEEN, оно бы было как то нативней чем >= <=
Параметры дублируются, вот что получилось из всего двух переменных start и end
DECLARE @start1 DateTime2
SET @start1 = '2012-03-20'
DECLARE @end1 DateTime2
SET @end1 = '2015-03-20'
DECLARE @start2 DateTime2
SET @start2 = '2012-03-20'
DECLARE @end2 DateTime2
SET @end2 = '2015-03-20'
DECLARE @end3 DateTime2
SET @end3 = '2015-03-20'
SELECT
[s].[AccountName],
Sum(IIF([c].[RoutingCategory] = N'Resolved', [c].[PieceCount], 0)) as [c1],
Sum(IIF([c].[RoutingCategory] = N'Resolved', 0, [c].[PieceCount])) as [c2]
FROM
[dbo].[Counts] [c]
INNER JOIN [dbo].[Sessions] [s] ON [c].[Application] = [s].[Application] AND [c].[JobSessionID] = [s].[JobSessionID]
WHERE
NOT ([s].[AccountName] IS NULL OR Len([s].[AccountName]) = 0) AND
NOT ([s].[DepartmentName] IS NULL OR Len([s].[DepartmentName]) = 0) AND
NOT ([s].[MachineID] IS NULL OR Len([s].[MachineID]) = 0) AND
([s].[SessionStart] >= @start1 AND [s].[SessionStart] <= @end1 OR [s].[SessionStop] >= @start2 AND [s].[SessionStop] <= @end2) AND
[s].[SessionStart] <= @end3
GROUP BY
[s].[AccountName]
Уже как то говорил об этом, можна например при генерации держать список параметров и если название, тип и значение совпадают то переиспользовать.