У меня есть база данных, на которой пользователи могут выполнять различные вычисления. Расчеты работают на 4 разных столбцах каждый расчет не обязательно использовать каждый столбец т.е. calculation1 может превратиться в SQL, какДинамически генерировать Linq Выбрать
SELECT SUM(Column1)
FROM TABLE
WHERE Column1 is not null
и calculation2 бы
SELECT SUM(Column2)
WHERE Column2 is null
Я пытаюсь создать это с помощью LINQ и I может получить правильные данные обратно, вычисляя все каждый раз, когда такие, как
table.Where(x => x.Column1 != null)
.Where(x => x.Column2 == null)
.GroupBy(x => x.Date)
.Select(dateGroup => new
{
Calculation1 = dateGroup.Sum(x => x.Column1 != null),
Calculation2 = dateGroup.Sum(x => x.Column2 == null)
}
проблема заключается в том, что мой набор данных очень велик, и поэтому я не хочу для выполнения расчета, если пользователь не запросил его. Я изучил динамическое создание запросов Linq. Все, что я нашел до сих пор, это PredicateBuilder и DynamicSQL, которые кажутся полезными только для динамического генерации предиката Where и hardcoding самого SQL-запроса как строки с суммированием Sum (Column1) или Sum (Column2), когда это необходимо.
Как можно динамически добавлять разные части запроса Select в анонимный тип, как это? Или я должен смотреть на совершенно другой способ обращения с этим
Вместо динамического создания ваших запросов вы могли бы инкапсулировать их в свои собственные методы и вызвать методы условно? – Jerreck
Взгляните на * Динамический LINQ *: http://dynamiclinq.azurewebsites.net/. Он позволяет использовать динамические предложения во многих операциях LINQ, включая 'Select'. –
Ive немного посмотрел на Dynamic Linq. Я больше посмотрел на вашу ссылку, но избавление от безопасности типа кажется выбором, который я только хочу сделать, если мне нужно –