C# 将LINQ中的GUID与字符串与Entites进行比较会引发错误
编辑,这不是重复的。建议的SO链接希望我调用C# 将LINQ中的GUID与字符串与Entites进行比较会引发错误,c#,linq,C#,Linq,编辑,这不是重复的。建议的SO链接希望我调用ToString(),但我正在运行.COUNT()并尝试进行大于的比较,因此调用ToString()不是正确答案 我试图使用IF快捷方式填充变量,但运行时出现错误 LINQ to实体无法识别方法“System.Guid Parse(System.String)”方法,并且无法将此方法转换为存储表达式 我正在运行的代码是 IsAdmin = (db.yaf_prov_RoleMembership .Where(rm =>
ToString()
,但我正在运行.COUNT()
并尝试进行大于的比较,因此调用ToString()
不是正确答案
我试图使用IF
快捷方式填充变量,但运行时出现错误
LINQ to实体无法识别方法“System.Guid Parse(System.String)”方法,并且无法将此方法转换为存储表达式
我正在运行的代码是
IsAdmin = (db.yaf_prov_RoleMembership
.Where(rm => rm.UserID == UserKey
&& rm.RoleID == Guid.Parse("adsfasd654asdf816asdf"))
.Count() > 0) ? true : false;
如果我去掉Guid.Parse
并直接进行比较,则会得到错误
运算符==不能应用于System.Guid和String类型的操作数
要将GUID与LINQ查询中的字符串进行比较,需要做什么?不知道Dave为什么删除了他的答案-您应该将字符串解析移出存储表达式。否则,实体框架将尝试将
Guid.Parse
方法调用转换为SQL,但无法执行此操作:
var adminRoleID = Guid.Parse("adsfasd654asdf816asdf");
还可以使用Queryable.Any
简化查询:
IsAdmin = db.yaf_prov_RoleMembership
.Any(rm => rm.UserID == UserKey && rm.RoleID == adminRoleID);
第一次错误响应的关键部分是:
[…]到存储表达式中。
如果首先解析guid并将其存储在变量中,我认为它应该可以工作:
var guid = Guid.Parse("adsfasd654asdf816asdf");
IsAdmin = db.yaf_prov_RoleMembership
.Any(rm => rm.UserID == UserKey && rm.RoleID == guid );
每当您执行执行LINQ查询的“东西”不知道如何处理的操作时,就会出现此错误。在本例中,实体框架不知道如何将Guid.Parse转换为SQL语句/“存储表达式”
编辑:修改为使用。任何。根据Sergey Berezovskiy的回答RoleID
?@Selman22的类型是什么,它是数据库中的GUID。我看到了这两篇文章,但如果我做了ToString()
,那么我就不能运行.Count()并进行比较。在前面做GUID.parse并将其存储在变量adminGuid中。然后将Guid或Guid.ToString()与String.Equals(str1,str2)进行比较。从我的答案复制粘贴。你甚至没有将adminRoleID
重命名为guid
@SergeyBerezovskiy怀疑这是一个复制粘贴,在一分钟内回答,而且几乎只有一种方法来写这个,我也会写完全一样的,如果你否决了,我建议你撤销)我在你之前回答了同样的问题,我以为我在我的编辑信息中包含了你的归属,但显然是这样not@RonanThibaudau只有在我完全确定的情况下,我才会写关于复制粘贴的文章:正如你们所看到的,这个答案并没有被否决。因为你们已经添加了一个关于为什么他的代码不起作用的描述,所以我将对你们的投赞成票。我添加编辑的全部意图是:事实上,将信用点指向您的方向,我没有做到这一点,所以我向您道歉。