C# 带有实体框架的MySql连接器:比较LINQ Where子句中的Char(36)guid
我觉得这个标题很贴切 我在MySql表中使用了一个Char(36),当使用实体框架时,它会自动被识别为GUID 插入GUID没有问题,但是在WHERE子句中尝试比较GUID是一场噩梦 我所尝试的: 首先,我尝试了一个C# 带有实体框架的MySql连接器:比较LINQ Where子句中的Char(36)guid,c#,mysql,entity-framework,linq-to-entities,mysql-connector,C#,Mysql,Entity Framework,Linq To Entities,Mysql Connector,我觉得这个标题很贴切 我在MySql表中使用了一个Char(36),当使用实体框架时,它会自动被识别为GUID 插入GUID没有问题,但是在WHERE子句中尝试比较GUID是一场噩梦 我所尝试的: 首先,我尝试了一个WHERE element.GUID==GuidToCompare 这导致LINQ to Entities无法识别方法“System.Object CompareObject Equal(System.Object,System.Object,Boolean)”方法,并且无法将此方法
WHERE element.GUID==GuidToCompare
这导致LINQ to Entities无法识别方法“System.Object CompareObject Equal(System.Object,System.Object,Boolean)”方法,并且无法将此方法转换为存储表达式。
然后我尝试将值转换为字符串,如下所示:
WHERE element.GUID.ToString()==GuidtoCompare.ToString()
这导致了此错误:LINQ to Entities无法识别“System.String ToString()”方法,并且无法将此方法转换为存储表达式。
所以不管怎样,我都无法比较它们。如果guid不起作用,我准备不使用它 我知道出了什么问题:那只是我自己的愚蠢错误
比较guid是非常正确的,这不是导致错误的部分。实际上,同一LINQ查询的后面部分触发了该错误。它将
ProviderUserKey(Object)
与ID(int)
进行了比较。ProviderUserKey
本质上是一个int,我只需要在VB.NET中显式声明它的类型(CType(Object,Integer)
,或者在C#中显式声明它的类型((int)Object
)什么是element.GUID的类型?Guid还是字符串?嗯,其中一个不是Guid,或者L2E看不到CompareObjectEqual
。L2E当然支持直接比较两个GUI。检查你的类型。@Craig哦,天哪。。。我知道出了什么问题,请看答案