internal LinqExpr.Expression Expression(Dictionary<string, LinqExpr.ParameterExpression> parameters)
{
if (IsSimple)
{
return LinqExpr.Expression.Constant(Constant);
}
var value = default(double);
var x = Value as object;
var fieldType = "null";
try {
if (Double.TryParse(Value, out value)) x = value;
fieldType = parameters[Field].Type.Name.ToLower();
} catch { // Exception ex) {
x = 0.0;
//Console.Out.WriteLine("UnkownType?" + ex.ToString());
}
switch (Operator)
{
case ">":
case ">*":
return LinqExpr.Expression.GreaterThan(parameters[Field],
LinqExpr.Expression.
Constant(x));
case ">=":
case ">=*":
return LinqExpr.Expression.GreaterThanOrEqual(parameters[Field],
LinqExpr.Expression.
Constant(x));
case "<>":
case "!=":
case "!=*":
if (fieldType == "string")
{
return LinqExpr.Expression.NotEqual(parameters[Field],
LinqExpr.Expression.
Constant(Value));
}
else
{
return LinqExpr.Expression.NotEqual(parameters[Field],
LinqExpr.Expression.
Constant(x));
}
case "<":
case "<*":
return LinqExpr.Expression.LessThan(parameters[Field],
LinqExpr.Expression.
Constant(Value));
case "<=":
case "<=*":
return LinqExpr.Expression.LessThanOrEqual(parameters[Field],
LinqExpr.Expression.
Constant(x));
case "=":
case "=*":
if (fieldType == "string")
{
return LinqExpr.Expression.Equal(parameters[Field],
LinqExpr.Expression.
Constant(Value));
}
else
{
return LinqExpr.Expression.Equal(parameters[Field],
LinqExpr.Expression.
Constant(x));
}
default:
throw new Exception("Unknown operator '" + Operator + "'");
}
}