Lambda表达式比较运算符“>”,“> =”问题

时间:2012-09-12 14:39:32

标签: c# lambda

当我在实体框架中执行这些运算符(>>=)lambda表达式时。两者都得到相同的结果。

  1. db.Companies.where(Company => (Compare(Convert(Company.Name), "y") > 0))
  2. db.Companies.where(Company => (Compare(Convert(Company.Name), "y") >= 0))
  3. Lambda表达式比较运算符存在这个问题吗? 我改为

    1. db.Companies.where(Company => (Compare(Convert(Company.Name), "y") > 1)) - 没有结果。 不正确

    2. db.Companies.where(Company => (Compare(Convert(Company.Name), "y") >= 1)) - 64个结果

    3. 源代码

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

4 个答案:

答案 0 :(得分:2)

如果您得到相同的结果,则表示没有Company.Name等于“Y”

答案 1 :(得分:0)

为什么你会期望答案是不同的。

  • Compare做什么?
  • Convert做什么?
  • Compare(Convert(Company.Name), "y")评估的内容是什么?

如果评估为1或更高,则两个答案都是正确的。

答案 2 :(得分:0)

如果两个查询的结果数相同,则表示(Compare(Convert(Company.Name), "y")永远不会等于零。如果它大于零,则两个查询都将返回它;如果它小于零,则任何查询都不会返回它。

答案 3 :(得分:0)

感谢所有回复Lambda表达式查询只是正确的。

db.Companies.where(Company => (Compare(Convert(Company.Name), "Test") > 0))
db.Companies.where(Company => (Compare(Convert(Company.Name), "Test") >= 0))

我将“右arg”值更改为“Test”。我有一个记录'名字'与测试。执行了以下查询。

db.Companies.where(Company => (Compare(Convert(Company.Name), "Test") > 0)) 

并显示结果105(此处带有'测试'的名称未显示。 - 正确

然后我执行了这个

db.Companies.where(Company => (Compare(Convert(Company.Name), "Test") >= 0)) 

并显示结果106(此处显示带有'测试'的名称) - 正确