C# Lambda表达式比较运算符“&燃气轮机&引用&引用&燃气轮机=&引用;问题

C# Lambda表达式比较运算符“&燃气轮机&引用&引用&燃气轮机=&引用;问题,c#,lambda,C#,Lambda,当我在实体框架中执行这些操作符(和=)时,lambda表达式。两者都得到了相同的结果 db.companys.where(Company=>(比较(转换(Company.Name),“y”)>0)) db.companys.where(Company=>(比较(转换(Company.Name),“y”)>=0)) Lambda表达式比较运算符是否存在此问题? 我改成 db.companys.where(Company=>(比较(Convert(Company.Name),“y”)>1))-无结果

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

  • db.companys.where(Company=>(比较(转换(Company.Name),“y”)>0))
  • db.companys.where(Company=>(比较(转换(Company.Name),“y”)>=0))
  • Lambda表达式比较运算符是否存在此问题? 我改成

  • db.companys.where(Company=>(比较(Convert(Company.Name),“y”)>1))
    -无结果。其不正确

  • db.companys.where(Company=>(比较(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)));
    

    如果您得到的结果相同,则意味着没有
    公司。名称
    等于“Y”

    为什么您希望答案不同

    • 比较
      做什么
    • Convert
      做什么
    • 比较(转换(Company.Name),“y”)
      的计算结果是什么

    如果计算结果为
    1
    或更大,则两个答案都是正确的。

    如果两个查询的结果数相同,则表示
    (比较(转换(公司名称),“y”)
    永远不等于零。如果它大于零,则两个查询都将返回它;如果它小于零,则两个查询都不会返回它。

    感谢所有响应,Lambda expression查询仅是正确的

    db.Companies.where(Company => (Compare(Convert(Company.Name), "Test") > 0))
    db.Companies.where(Company => (Compare(Convert(Company.Name), "Test") >= 0))
    
    我将“right arg”值更改为“Test”。我有一条带有Test的记录“Name”。执行了以下查询

    db.Companies.where(Company => (Compare(Convert(Company.Name), "Test") > 0)) 
    
    并显示结果105(此处未显示带有“Test”的名称。-正确

    然后我执行了这个

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

    并显示结果106(此处显示带有“Test”的名称)-正确

    什么是
    转换
    比较
    ?好吧,如果没有看到它们,我们无法判断它们应该评估为什么。-1个不完整的问题!转换和比较
    做什么
    。转换我使用FieldType.db.companys.where(Company=>(Compare(Convert(Company.Name),“y”)>0)给出了64个结果。db.companys.where(Company=>(Compare(Convert(Company.Name),“y”)>=0)也给出了64个结果您应该向我们展示Comapare/Convert的作用。但是如果Compare与String.Compare的作用相同,那么如果结果>0,则表示公司名称与“y”不同.那么,你的名字在哪里返回到“Y”如果第一个操作数大于第二个操作数,string.compare将返回大于零的值。如果两个操作数不相等,则返回非零值。当然,如果使用>0,则返回大于0的值。如果使用>=0,则返回大于零的值。因此,如果得到相同的结果,则意味着没有0,因此没有公司。名称等于“Y”(您的比较)@elviejo Yes。您的答案文本是正确的(假设
    Compare
    Convert
    按照您认为的方式操作),但您的注释不是。如果结果为>0,则表示公司名称与“Y”不同“。那么,您的where将返回所有与“Y”不同的名称。。所有与“Y”不同的公司名称将是
    (比较(转换(company.Name),“Y”)!=0)
    。两者都是“正确的”,而不是“正确的”,因为我们不知道要求,我们不知道“正确的”是什么"应该是。而且它们都可能导致任何小于0的结果,并且是相同的。只有当compare有时返回0时,它们才会不同。我这么说是因为查看代码,并对Unshawn方法的功能进行一些假设,我的猜测都是不正确的。他可能应该使用
    !=
    而不是使用任何一个大于0的方法a或大于或等于。我尝试了此db.companys.where(Company=>(Compare(Convert(Company.Name),“y”)>1)-没有结果db.companys.where(Company=>(Company(Convert(Company.Name),“y”)>=1))-64个结果——我的查询表达式greaterthanEqual的代码:case operatorType.greaterthanEqual:return Expression.GreaterThanOrEqual(Expression.Call(typeof(string),“Compare”,null,new[]{argLeft,argRight}),Expression.Constant(1,typeof(int));