Как преобразовать SqlExpression <T>в SqlExpression <TU>с помощью ServiceStack OrmLite? - PullRequest
1 голос
/ 18 февраля 2020

Мне нужно работать с SqlExpression<T> в частном методе, но результат должен быть SqlExpression<TU> (из-за контекста моего проекта). T и TU имеют одинаковую структуру (TU - это подмножество T с некоторыми вычисленными выражениями). Я не нашел способа преобразовать SqlExpression<T> в SqlExpression<TU>.

. В следующем коде T = Класс продукта и TU = Класс порошка.

// Sample code
private static SqlExpression<Powder> CreateDefaultExpression(IDbConnection db, IPowderListFilter request)
{
    var ev = db.From<Product>()
    // Joins are set here...
            .Select(p => new
            {
                CustomRalId = Sql.As(p.CustomRalId, nameof(Powder.CustomRalId)),
                Mass = Sql.As(Sql.Sum(p.Width * p.Height / 1000000) * 2 * Settings.LacqueringGramsPerSquareMeter / 1000, nameof(Powder.Mass))
            });

    // I need to do something like...
    ev.ConvertTo<SqlExpression<Powder>>();
    // or ...
    return new SqlExpression<Powder>(ev);
}

1 Ответ

1 голос
/ 19 февраля 2020

Вы в принципе не можете, типизированное SqlExpression - это построитель запросов, который вы не можете просто изменить Тип и заставить его автоматически стирать и повторно применять все мутации к построителю запросов, используя другой тип.

Если целью является повторное использование, вам нужно использовать стандартный C# до DRY как можно большего количества кода, которого будет не так много, поскольку все лямбда-выражения типизированы для другого типа.

...