C# 操作员'==';与操作数类型不兼容';Guid';和';Guid';使用DynamicExpression.ParseLambda<;T、 布尔>;
我正在使用 还有 还有Nuget版本 PM>安装程序包DynamicLink 我试图构造一个包含guid的where子句 我试过使用字符串C# 操作员'==';与操作数类型不兼容';Guid';和';Guid';使用DynamicExpression.ParseLambda<;T、 布尔>;,c#,linq,dynamic,dynamic-linq,C#,Linq,Dynamic,Dynamic Linq,我正在使用 还有 还有Nuget版本 PM>安装程序包DynamicLink 我试图构造一个包含guid的where子句 我试过使用字符串“Id==@0”。 参数数组只是一个具有值(guidxxxx)的对象[] var whereclauseb=BuildLogicalKeyWhereClause2(实体,logicalKey)//构建字符串 var parms=BuildParamArray(实体,logicalKey);//对象[] var whereLambda=Ofsi.Bos.Core
“Id==@0”
。
参数数组只是一个具有值(guidxxxx
)的对象[]
var whereclauseb=BuildLogicalKeyWhereClause2(实体,logicalKey)//构建字符串
var parms=BuildParamArray(实体,logicalKey);//对象[]
var whereLambda=Ofsi.Bos.Core.DynamicExpression.ParseLambda(whereclauseb.ToString(),parms)//作语法分析
DynamicExpression.ParseLambda中引发异常
运算符“==”与操作数类型“Guid”和“Guid”不兼容
- 我也尝试过使用GUID和字符串。(失败)
- 我尝试了和“Id=@0”(失败)
- String==String有效,Int32==Int32有效,但Guid==Guid无效
有什么想法吗?尝试使用
Equals
方法,而不是字符串中的=
运算符:
"Id.Equals(@0)"
可能代码中有一个bug,因为
Guid
在他们的文档中有明确的支持。ObjectDirectoryId.Equals(@0)&&ObjectId=@1&&CultureName=@2,匹配的对象[]刚刚被解析。:-)一旦考试完成,我会记为正确答案,但看起来不错。谢谢,这很好,但我有一个空Guid的问题。我得到了一个类型为“System.Guid”的异常表达式,它不能用于方法“Boolean Equals(System.Object)”的类型为“System.Object”的参数@WahidBitar我猜你有MyGuid.Equals(null)
或MyGuid.Equals(@0)
,你传递的参数是null
fo@0
。在这两种情况下,请确保您在中使用的是(Guid?)null
或默认值(Guid?
,而不仅仅是null
。感谢您的快速支持。我发现最简单的方法是使用MyGuid.Value.Equals(另一个值)
"Id.Equals(@0)"