2010-02-17 33 views
1

通過WROX「Beginning ASP.NET MVC 1.0」書的工作我遇到了一個奇怪的'錯誤'。運算符==不能應用於Linq中的Guid或int(MVC書籍示例)

「Operator'=='不能應用於'System.Guid'或'int'類型的操作數。問題中的一行是:

(p => p.ID_Officers == id).Single(); 

完整的代碼在下面,官員是我的表,ID_Officers是我的ID字段。 (我想我可以使用'o'而不是'p')

public ActionResult IndividualOfficer(int id) 
    { 
     OfficersDataContext dataContext = new OfficersDataContext(); 
     Officer officer = dataContext.Officers.Where 
      (p => p.ID_Officers == id).Single(); 
     ViewData["OfficerName"] = officer.OfficerName; 
     ViewData["Officer"] = officer; 

     return View(); 
    } 

對於這個初學者的任何智慧話語將不勝感激。

我可能會補充一點,雖然這本書是爲初學者推薦的 - 男孩是乾的。它清楚地展示出來,很明顯看到練習期間需要添加/鍵入什麼,但是我覺得它是爲經驗豐富的MVC編程人員編寫的。而不是一個初學者程序員。

那麼,有沒有人知道一個更初學者友好的書(我喜歡書和閱讀),我可以更容易地沉浸在我的時間和牙齒?

感謝您的幫助和指導。

邁克

回答

3

它很簡單。

idint。正如錯誤消息所示,p.ID_Officers是一個Guid,它不是int,並且不能針對int進行檢查以獲得相等性。你知道兩種不同的類型。

我不確定控制器方法的id來自哪裏。在某個時候,您必須向用戶提供一份官員名單,併爲鏈接定義中的每個人員建立鏈接,其中包括p.ID_Officers,但您的路線預計爲int。沒有看到你的路線如何配置或你的官員鏈接是如何構建的,我不能給你更多的暗示。

0

好了,問題是,p.ID_OfficersSystem.Guidid您比較它是int類型。所以你可以改變你的方法的簽名到

public ActionResult IndividualOfficer(Guid id) 

現在它應該能夠編譯。

另一種選擇是將您的數據庫架構中的id列更改爲int而不是uniqueidentifier(它在.net中成爲System.Guid)。

+1

這是假設他的路線和鏈接構建正確。如果沒有,官員鏈接可能會以404結尾,或者他們可能被分流到另一種方法。或者,他當然可能會很幸運。 – Will 2010-02-17 13:37:22

+0

我會將我的ID_Officer更改爲int。我嘗試了uniqueidentifier,因爲它看起來是正確的......嗯。至於我的路線 - 我還沒有觸及過這些,所以我想這是系統默認值。 我注意到我不允許簡單地將Unique更改爲int。很好,那是我學到的另一件事。我將不得不刪除數據庫,然後... – RocketGoal 2010-02-17 16:26:05

相關問題