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查询中的字符串进行比较,需要做些什么?
答案 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的回答