C# 为“创建表达式树”;例如;关于十进制字段
我想为查询表达式创建一个表达式树,该表达式如下所示: employee=>employee.Salary.StartsWith(“28”) 因此,sql可以显示为: 其中(员工工资,如“28%”) 问题是employee对象的属性Salary是十进制的,而StartsWith不是十进制的属性。我怎样才能抽出时间来做这件事 我的错误表达式树语法如下:C# 为“创建表达式树”;例如;关于十进制字段,c#,lambda,llblgenpro,llblgen,C#,Lambda,Llblgenpro,Llblgen,我想为查询表达式创建一个表达式树,该表达式如下所示: employee=>employee.Salary.StartsWith(“28”) 因此,sql可以显示为: 其中(员工工资,如“28%”) 问题是employee对象的属性Salary是十进制的,而StartsWith不是十进制的属性。我怎样才能抽出时间来做这件事 我的错误表达式树语法如下: var searchTextExp = Expression.Constant("28"); var parameterExp = Expressi
var searchTextExp = Expression.Constant("28");
var parameterExp = Expression.Parameter(typeof(EmployeeEntity), "employee");
var propertyExp = Expression.Property(parameterExp, "Salary");
var startsWithExp = Expression.Call(propertyExp, "StartsWith", null,
searchTextExp);
Expression<Func<EmployeeEntity, bool>> searchExpr =
Expression.Lambda<Func<EmployeeEntity, bool>>
(startsWithExp, new ParameterExpression[] { parameterExp });
employee => Functions.Like(employee.Salary,"28")
var searchtextextexp=Expression.Constant(“28”);
var parameterExp=Expression.Parameter(typeof(EmployeeEntity),“employee”);
var propertyExp=Expression.Property(参数exp,“工资”);
var startsWithExp=Expression.Call(propertyExp,“StartsWith”,null,
searchTextExp);
表达式searchExpr=
Lambda
(startsWithExp,新参数expression[]{parameterExp});
您知道最简单的解决方案(可能也适用于Linq to Sql)是:
如果llblgen不支持ToString(),则可以通过创建执行强制转换的视图来解决此问题。你的目标数据库是什么 如果是SQL Server,则可以使用CAST()函数创建视图 e、 g 之后,您应该能够将该视图映射到一个新类,并执行上面所述的查询
employee = employee.Salary.StartsWith("28");
我已经设法使用函数映射解决了这个问题,这是LLBLGEN Pro的一个特性
public class Functions
{
public static bool Like(string field, string value)
{
return true;
}
public static bool Like(decimal field, string value)
{
return true;
}
}
public class FunctionMappings : FunctionMappingStore
{
public FunctionMappings()
: base()
{
FunctionMapping mapping = new FunctionMapping(
typeof(Functions),
"Like",
2,
"{0} LIKE {1}");
this.Add(mapping);
}
}
然后,我将FunctionMappings的一个实例附加到LINQ元数据:
metadata.Mappings = new FunctionMappings();
然后使用以下函数:
var searchTextExp = Expression.Constant("28");
var parameterExp = Expression.Parameter(typeof(EmployeeEntity), "employee");
var propertyExp = Expression.Property(parameterExp, "Salary");
var startsWithExp = Expression.Call(propertyExp, "StartsWith", null,
searchTextExp);
Expression<Func<EmployeeEntity, bool>> searchExpr =
Expression.Lambda<Func<EmployeeEntity, bool>>
(startsWithExp, new ParameterExpression[] { parameterExp });
employee => Functions.Like(employee.Salary,"28")
嗯,我正在使用linq到llblgen,并且抛出了一个错误,因为“ToString”在解析时没有等效的转换。我已经尝试过了,并且:employee=>Convert.ToString(employee.Salary).StartsWith(“28”);这也不起作用。所以这可能更像是一个关于llblgen的问题。。。但是Linq表达式是正确的,我也认为这就是问题所在。我已经在llblgen论坛上记录了这个查询。它确实支持tostring(),但在db中,这是一个转换为char的过程,在这种情况下不起作用。视图是个不错的主意,但我对db的设计没有发言权。视图用于实现安全性,仅此而已。数据库是oracle10g@布马。当我使用ToString()时,我得到一个运行时错误,即对象没有ToString()属性。这是没有意义的,因为它有。虽然这不是由你来决定,但我建议用“观点”来解决问题。否则,您将不得不修改您正在使用的ORM-这将给您带来更多的努力。。。