Здравствуйте, _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-запрос.