Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将LINQ中的GUID与字符串与Entites进行比较会引发错误_C#_Linq - Fatal编程技术网

C# 将LINQ中的GUID与字符串与Entites进行比较会引发错误

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 =>

编辑,这不是重复的。建议的SO链接希望我调用
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只有在我完全确定的情况下,我才会写关于复制粘贴的文章:正如你们所看到的,这个答案并没有被否决。因为你们已经添加了一个关于为什么他的代码不起作用的描述,所以我将对你们的投赞成票。我添加编辑的全部意图是:事实上,将信用点指向您的方向,我没有做到这一点,所以我向您道歉。