Динамический синтаксис linq для подзапроса

Я хочу иметь следующий запрос в Dynamic LINQ. Я пробовал некоторые решения, но пока не добился успеха.

 select
    SUM([Value1]) AS [Sum]
        ,[Dim1] AS [Primary], 
        [Dim2] AS [Secondary]
    from
    (
        SELECT 
          value1, dim1, dim2
        FROM [BudgetLine]
        WHERE [BudgetID] = 4
    ) as a
    GROUP BY [Dim1], [Dim2]

Мой текущий код выглядит так, но мне нужно переписать его, чтобы получить приведенный выше SQL.

    var query = (DatabaseConnection.DataMemoryContext.GetTable<BudgetLineEntity>().AsQueryable()
    .Where(String.Format("BudgetID={0}",filter.BudgetId))
    .GroupBy(String.Format("new({0},{1})",primaryDimension.Name,secondaryDimension.Name), "new(Value1)")
    .Select(String.Format("new (Key.{0} as Primary, Key.{1} as Secondary, Sum(Value1) as Sum)",primaryDimension.Name,secondaryDimension.Name)));

primaryDimension.Name и SecondaryDimension.Name содержат имена столбцов для группировки.


person JohanLarsson    schedule 29.05.2014    source источник
comment
Вы никогда не получите этот точный код, LINQ будет использовать экстенты и множество псевдонимов и т. д., поэтому получить этот точный код, насколько я знаю, невозможно.   -  person Gusman    schedule 30.05.2014
comment
ок, а можно что-нибудь подобное?   -  person JohanLarsson    schedule 30.05.2014


Ответы (1)


Подумайте о том, чтобы запросить базу данных по вашему подзапросу, а затем сохранить результат в таблице данных, которую вы затем можете вычислить.

SELECT 
value1, dim1, dim2
FROM [BudgetLine]
WHERE [BudgetID] = 4

Статья MSDN — вычислительные ресурсы

person Nathan    schedule 30.05.2014
comment
Спасибо, на самом деле я так и сделал (сохранил результат запроса, который вы упомянули, в таблице базы данных и запустил для него Dynamic LINQ). Это привело к улучшению времени выполнения запроса примерно на 20%, так что я доволен. - person JohanLarsson; 30.05.2014