2011-03-10 35 views
2

我使用Linqer到SQL轉換爲LINQ的價值:的LINQ - 型 '的System.Guid' 不能轉換爲 '字符串'

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很新。有人可以解釋什麼是錯的?

謝謝!

回答

3
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

+0

爲什麼不使用平等運營商。無論如何,它似乎被重載以調用Equals,並且對我來說更具可讀性。 – 2011-03-14 16:14:31

3

您可以employeesites.SiteId.ToString()取代CStr(employeesites.SiteId),但最好是周圍的其他方法

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

這樣,您就不會遇到大小寫不同的問題比較等

相關問題