【问题标题】:Linq - Value of type 'System.Guid' cannot be converted to 'String'Linq - 'System.Guid' 类型的值不能转换为 'String'
【发布时间】:2011-03-10 15:41:28
【问题描述】:

我正在使用 Linqer 将 SQL 转换为 Linq:

Update EmployeeSite SET SiteId = Null 
WHERE SiteId = '86086EC5-567A-46B3-8DFC-E624F9B0324B'

翻译成:

Dim queryEmployeeSites = _
    From employeesites In rdc.EmployeeSites _
    Where _
      CStr(employeesites.SiteId) = "86086EC5-567A-46B3-8DFC-E624F9B0324B" _
    Select employeesites
For Each employeesites As EmployeeSite In queryEmployeeSites
    employeesites.SiteId = Nothing
Next
rdc.SubmitChanges()

但是当我尝试运行 Linq 代码时,我收到了错误消息:

错误编译表达式:错误编译表达式:“System.Guid”类型的值无法转换为“String”。

我对 Linq 很陌生。有人可以解释什么是错的吗?

谢谢!

【问题讨论】:

    标签: sql vb.net string linq


    【解决方案1】:

    您可以将CStr(employeesites.SiteId) 替换为employeesites.SiteId.ToString(),但最好是反过来比较

    employeesites.SiteId = Guid.Parse("86086EC5-567A-46B3-8DFC-E624F9B0324B")
    

    这样您就不会遇到大小写不同等问题。

    【讨论】:

      【解决方案2】:
      Dim queryEmployeeSites = _
          From employeesites In rdc.EmployeeSites _
          Where _
          employeesites.SiteId.ToString().Equals("86086EC5-567A-46B3-8DFC-E624F9B0324B") _
          Select employeesites
      
      For Each employeesites As EmployeeSite In queryEmployeeSites
          employeesites.SiteId = Nothing
      Next
      
      rdc.SubmitChanges()
      

      调用ToString() 应该可以工作,最好使用Equals 进行字符串相等,或者使用String.Compare

      【讨论】:

      • 为什么不使用相等运算符。无论如何调用 Equals 似乎是超载的,而且它对我来说更具可读性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 2013-06-12
      • 1970-01-01
      • 2022-11-04
      相关资源
      最近更新 更多