Linq2db что можна бы было улучшить
От: Danchik Украина  
Дата: 20.03.15 13:13
Оценка:
Привет Игорь,

Поигрался над прототипом для клиента, и переписал пару выборок с хранимок на Linq2db (SQL Server, Azure SQL).
Сиквел генерится просто чудестно, но есть некоторые вещи которых не хватает или я не нашел

  1. Хотелось бы иметь возможнось вызывать всторенную фунцию ISNULL(SomeField, 0)
  2. Не нашел возможности сделать BETWEEN, оно бы было как то нативней чем >= <=
  3. Параметры дублируются, вот что получилось из всего двух переменных 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]
Уже как то говорил об этом, можна например при генерации держать список параметров и если название, тип и значение совпадают то переиспользовать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.