我需要使用私有方法使用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);
}
您基本上不能,类型化的SqlExpression是一个查询构建器,您不能只更改Type并使其自动擦除并使用其他Type将所有变异重新应用于查询构建器。
如果目标是重用,那么您需要使用标准C#来尽可能多地DRY代码,因为所有lambda表达式都键入了不同的Type,所以不会太多。]