Re[7]: Оптимизация работы с sql
От: Qulac Россия  
Дата: 07.01.24 06:28
Оценка: +1
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, IT, Вы писали:


IT>>Более простое решение с Property

_FR>
IT>>            var metaData = new[]
IT>>            {
IT>>                new { TableName = "Customer", DimensionColumnName = "CustomerID", SumColumnName = "Total" },
IT>>                new { TableName = "Order",    DimensionColumnName = "OrderID",    SumColumnName = "Value" },
IT>>            };
_FR>  // …
IT>>        public class Table
IT>>        {
IT>>            public int DimensionColumn { get; set; }
IT>>            public int SumColumn       { get; set; }
IT>>        }
_FR>


_FR>Сложность в том, что и количество колонок, по которым нужна группировка, заранее не известно, то есть должно быть ("входные данные") как-то так:

_FR>
IT>>var metaData = new[]
IT>>{
IT>>    new { TableName = "Customers", DimensionColumnNames = ["Country", "Region", "City"],   SumColumnName = "Total" },
IT>>    new { TableName = "Orders",    DimensionColumnNames = ["CustomerID", "EmployeeID"],    SumColumnName = "Freight" },
IT>>    new { TableName = "Orders",    DimensionColumnNames = [],                              SumColumnName = "Freight" }, // Total
IT>>};
_FR>


Вот первое что приходит на ум — это сделать какой ни будь класс SqlPattern который получает необходимые методанные и по ним строит запрос. Его можно использовать с паттерном Builder — это позволить создавать SqlPattern по частям. Еще есть вариант с формальными грамматиками. Если мы можем описать грамматику мета-языка по которому потом будут строится запросы, то можно написать парсер который будет получать входную строку мета-языка и по ней генерить sql-запрос.
Программа – это мысли спрессованные в код
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.