运算符 '==' 与使用 DynamicExpression.ParseLambda<T, bool> 的操作数类型 'Guid' 和 'Guid' 不兼容

Posted

技术标签:

【中文标题】运算符 \'==\' 与使用 DynamicExpression.ParseLambda<T, bool> 的操作数类型 \'Guid\' 和 \'Guid\' 不兼容【英文标题】:Operator '==' incompatible with operand types 'Guid' and 'Guid' using DynamicExpression.ParseLambda<T, bool>运算符 '==' 与使用 DynamicExpression.ParseLambda<T, bool> 的操作数类型 'Guid' 和 'Guid' 不兼容 【发布时间】:2013-05-04 05:13:30 【问题描述】:

我正在使用 Dynamic Linq library 有 Source code and basic docu 和 Nuget 版本

PM> 安装包 DynamicLINQ

我正在尝试构建涉及GUID P>的WHERE子句

我尝试过使用字符串"Id == @0"。 参数数组只是一个object[],其值为(Guid xxxx

  var whereClauseSB = BuildLogicalKeyWhereClause2(entity, logicalKey);  //build string
  var parms = BuildParamArray(entity, logicalKey); // object[]
  var whereLambda = Ofsi.Bos.Core.DynamicExpression.ParseLambda<T, bool>(whereClauseSB.ToString(),parms);  //parse

在dynamicexpression.parselambda

中抛出异常

运算符'=='与操作数类型'GUID'和'GUID' P>不兼容

我也尝试过使用 GUID 和字符串。(失败) 我尝试使用“Id = @0”(失败)。 String == string 有效,Int32==int32 也有效,但 Guid 无效 == Guid 无效

有什么想法吗?

【问题讨论】:

也许代码中存在错误,因为 Guid 在他们的文档中有明确的支持。 【参考方案1】:

尝试在字符串中使用Equals 方法而不是== 运算符:

"Id.Equals(@0)"

【讨论】:

ObjectDirectoryId.Equals(@0) && ObjectId == @1 && CultureName == @2 与匹配的 object[] 刚刚被解析。 :-) 测试完成后,我会将其标记为正确答案,但看起来不错。谢谢pswg 这很好,但我遇到了 Nullable Guid 的问题。我得到了“System.Guid”类型的异常表达式不能用于方法“Boolean Equals(System.Object)”的“System.Object”类型的参数 @WahidBitar 我猜你有MyGuid.Equals(null)MyGuid.Equals(@0) 并且你传递了null 的参数@0。无论哪种情况,请确保您使用的是 (Guid?)nulldefault(Guid?) 而不仅仅是 null 感谢您的快速支持。我发现最简单的方法是使用MyGuid.Value.Equals(anotherValue)

以上是关于运算符 '==' 与使用 DynamicExpression.ParseLambda<T, bool> 的操作数类型 'Guid' 和 'Guid' 不兼容的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将 Rx“使用”运算符与 IAsyncDisposable 一起使用?

如何将扩展运算符与“this”一起使用?

SQL --------------- 运算符 = 与 in

为啥我不能将接口与显式运算符一起使用? [复制]

逗号运算符如何与 C++ 中的 cout 一起使用?

将索引与 Mongo 的 $first 组运算符一起使用