当我在实体框架中执行这些运算符(>
和>=
)lambda表达式时。两者都得到相同的结果。
db.Companies.where(Company => (Compare(Convert(Company.Name), "y") > 0))
db.Companies.where(Company => (Compare(Convert(Company.Name), "y") >= 0))
Lambda表达式比较运算符存在这个问题吗? 我改为
db.Companies.where(Company => (Compare(Convert(Company.Name), "y") > 1))
- 没有结果。 不正确
db.Companies.where(Company => (Compare(Convert(Company.Name), "y") >= 1))
- 64个结果
源代码
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)));
答案 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(此处显示带有'测试'的名称) - 正确