将GUID与LINQ to Entities中的字符串进行比较会引发错误

时间:2014-08-17 22:09:11

标签: c# linq

编辑,这不是重复。建议的SO链接要求我拨打ToString(),但我正在运行.COUNT()并尝试执行大于比较,因此调用ToString()不是正确答案。

我正在尝试使用IF快捷方式填充变量但是当我运行它时出现错误

  

LINQ to Entities无法识别方法' 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查询中的字符串进行比较,需要做些什么?

2 个答案:

答案 0 :(得分:15)

不知道为什么Dave删除了他的答案 - 你应该只将字符串解析移出商店表达式。否则,Entity Framework会尝试将Guid.Parse方法调用转换为SQL,并且无法执行此操作:

var adminRoleID = Guid.Parse("adsfasd654asdf816asdf");

还可以使用Queryable.Any来简化您的查询:

IsAdmin = db.yaf_prov_RoleMembership
            .Any(rm => rm.UserID == UserKey && rm.RoleID == adminRoleID);

答案 1 :(得分:0)

您的第一个错误响应的关键部分是:[...]into a store expression。 如果你先解析guid并存储在var中,我认为它应该可行:

 var guid = Guid.Parse("adsfasd654asdf816asdf");
 IsAdmin = db.yaf_prov_RoleMembership
             .Any(rm => rm.UserID == UserKey && rm.RoleID == guid );

每当你进行操作时,''执行你的LINQ查询不知道如何处理,你会得到这个错误。在这种情况下,它的实体框架不知道如何将Guid.Parse转换为SQL语句/'存储表达式'。

编辑:已修改为使用.Any。根据Sergey Berezovskiy的回答