3

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

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

这是代码,它适用于整数数据类型:

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);
        ...
    }
}

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

4

2 回答 2

3

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

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

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

于 2012-09-12T06:22:45.410 回答
0

从这里得到解决方案

使用表达式树的动态 Linq 2 Sql 引发异常“二进制运算符小于未为 System.String 和 System.String 定义”

开关((操作员类型)操作类型){

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

} 
于 2012-09-12T08:40:16.650 回答