【问题标题】:Entity framework string datatype using >,>=,<,<= operator : Lambda expression使用 >,>=,<,<= 运算符的实体框架字符串数据类型:Lambda 表达式
【发布时间】:2012-09-12 16:40:16
【问题描述】:

我正在处理动态 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);
        ...
    }
}

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

【问题讨论】:

    标签: c#-4.0 lambda


    【解决方案1】:

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

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

    Compare() 如果 strA 小于 strB,则返回 0。

    【讨论】:

    • 针织,返回 String.Compare(argLeft, argRight) > 0;返回 String.Compare(argLeft, argRight) >= 0;两者都返回相同的结果。你有什么主意吗?关于这个我在这里张贴stackoverflow.com/questions/12390695/…
    【解决方案2】:

    从这里得到解决方案

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多