【问题标题】:Comparing GUID to string in LINQ to Entites throws error [duplicate]在 LINQ to Entities 中将 GUID 与字符串进行比较会引发错误 [重复]
【发布时间】:2014-08-17 22:09:10
【问题描述】:

编辑,这不是重复的。建议的 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 并进行直接比较,那么我会得到错误

Operator == 不能应用于 System.Guid 和 String 类型的操作数

为了将 GUID 与 LINQ 查询中的字符串进行比较需要做什么?

【问题讨论】:

  • RoleID 的类型是什么?
  • @Selman22 那是数据库中的 GUID。
  • 我看到了这两个帖子,但是如果我看到ToString(),那么我就无法运行 .Count() 并进行比较。
  • 之前执行 guid.parse 并将其存储在变量 adminGuid 中。然后将 Guid 或 Guid.ToString() 与 String.Equals(str1, str2) 进行比较。

标签: c# linq


【解决方案1】:

不知道为什么 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);

【讨论】:

    【解决方案2】:

    您的第一个错误响应的关键部分是:[...]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。根据谢尔盖别列佐夫斯基的回答

    【讨论】:

    • 从我的回答中复制粘贴。你甚至没有将adminRoleID 重命名为guid
    • @SergeyBerezovskiy 怀疑这是复制粘贴,彼此在 1 分钟内回答,几乎只有一种方法可以写这个,如果你不赞成我,我也会写完全一样的建议您撤消该操作)
    • 我在你之前回答了同样的事情,我以为我在编辑信息中包含了对你的归属,但显然我没有
    • 您已经添加了关于为什么他的代码不起作用的描述,我会支持您的。我添加该 EDIT 的全部意图:实际上是为了指出您的方向,我没有做到这一点,所以我很抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2020-04-30
    • 2011-10-19
    相关资源
    最近更新 更多