Я пишу небольшую библиотеку, чтобы помочь в построении запросов SQL (в настоящее время я выполняю только SELECT), но меня не устраивает аспект синтаксиса, вот пример для объяснения:
var db = FluentDb.WithConnectionString("SqlCeTest");
var query = db.From("Customers")
.Where(FS.Col("Age") > 18 & FS.Col("Name").StartsWith("L"))
.OrderBy("BirthDate")
.Select("Name", "Age", "BirthDate");
var customers = query.ToList((r) => new
{
Name = r.Get<string>("Name"),
Age = r.Get<int>("Age"),
BirthDate = r.Get<DateTime?>("BirtDate")
});
Часть, которую я хотел бы улучшить, это FS.Col("ColumnName")
, она должна обозначать FluentSql.Column (возвращать новый FluentColumn (columnName)), но я нахожу это немного длинным в этом контексте, что мне действительно нравитсядолжен быть в состоянии использовать только Col("ColumnName")
...
Кто-нибудь видит трюк, который я мог бы использовать, чтобы достичь этого, или другую идею синтаксиса?
Мои идеи:
- Метод расширения для строки:
Where("Name".Col() == "Jon")
- Лямбда-выражение с фабричным объектом с использованием индексатора:
.Where(c => c["Name"] == "Jon")
Кто-нибудь видит что-то лучше / короче / лучше?
Редактировать:
моя вторая идея выглядит хорошо, но есть и обратная сторона, если я использую ее в другом контексте: мне иногда нужно использовать FluentColumns в операторах Select (или OrderBy, или GroupBy)вот так:
query.Select(FS.Col("Name").As("Customer"), FS.Col("OrderId").Count().As("OrdersCount"));
Я должен был бы повторить 'c =>' fили каждый столбец ...