По какой-то причине я не люблю linq как интерфейс запросов и начал создавать библиотеку для создания sql некоторое время назад. Посмотрите на LambdaSql.
На данный момент он содержит базовые сценарии для select
предложения и where
фильтров. Задание полей, в которых сгруппированы, имеют, упорядочены по, объединения, вложенные запросы, уже поддерживаются. Вставка, обновление и удаление будут поддерживаться позже. Он также содержит некоторые пункты для расширения существующего поведения. Например, Limit
реализован таким образом.
Пример:
var qry = new SqlSelect
(
new SqlSelect<Person>()
.AddFields(p => p.Id, p => p.Name)
.Where(SqlFilter<Person>.From(p => p.Name).EqualTo("Sergey"))
, new SqlAlias("inner")
).AddFields<Person>(p => p.Name);
Console.WriteLine(qry.ParametricSql);
Console.WriteLine("---");
Console.WriteLine(string.Join("; ", qry.Parameters
.Select(p => $"Name = {p.ParameterName}, Value = {p.Value}")));
Выход:
SELECT
inner.Name
FROM
(
SELECT
pe.Id, pe.Name
FROM
Person pe
WHERE
pe.Name = @w0
) AS inner
---
Name = @w0, Value = Sergey
Подробнее здесь https://github.com/Serg046/LambdaSql