如何将SqlExpression 转换为SqlExpression 使用ServiceStack OrmLite?

问题描述 投票:1回答:1

我需要使用私有方法使用SqlExpression<T>,但结果应为SqlExpression<TU>(由于我的项目上下文)。T和TU的目标结构相同(TUT的子集,带有某些计算表达式)我没有找到将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);
}
servicestack ormlite-servicestack
1个回答
0
投票

您基本上不能,类型化的SqlExpression是一个查询构建器,您不能只更改Type并使其自动擦除并使用其他Type将所有变异重新应用于查询构建器。

如果目标是重用,那么您需要使用标准C#来尽可能多地DRY代码,因为所有lambda表达式都键入了不同的Type,所以不会太多。]

© www.soinside.com 2019 - 2024. All rights reserved.