使用>,> =,<,< =运算符:Lambda表达式的实体框架字符串数据类型

时间:2012-09-11 12:44:45

标签: c#-4.0 lambda

我正在使用动态Lambda表达式查询,而不使用API​​。

如果用户选择FieldName作为“AddressLine1”而运算符选择> = FieldValue作为“K” 它应该将结果返回为所有AddressLine1字段值,以K和L开头,M到Z系列。

以下是代码,适用于整数数据类型:

public static Expression CreateBinaryExpression(Expression argLeft, Expression argRight, operatorType opType) {
    switch ((operatorType)opType) {    
        case operatorType.Greater:
            return Expression.GreaterThan(argLeft, argRight);
        case operatorType.GreaterEqual:
            return Expression.GreaterThanOrEqual(argLeft, argRight);
        ...
    }
}

如何修改代码以使用大于等于运算符的String数据类型。我正在为此寻找表达。有人有想法吗?

2 个答案:

答案 0 :(得分:3)

您可以使用String.Compare()方法:

return String.Compare(argLeft, argRight) >= 0;

Compare()如果strA小于strB则返回< 0,当它们相等时返回0,如果strA大于strB则返回>

答案 1 :(得分:0)

从这里得到解决方案

Dynamic Linq 2 Sql using Expressions Trees raising exception "Binary Operator LessThan not defined for System.String and System.String"

switch((operatorType)opType)     {

 case operatorType.Greater: return Expression.GreaterThan(
                            Expression.Call(typeof(string),
                            "Compare", null, new[] { argLeft, argRight }),
                             Expression.Constant(0, typeof(int)));

}