2012-12-17 19 views
1

下面是我在我的一個ASP MVC控制器中使用的Linq查詢。我試圖從SQL數據庫中提取一條記錄,然後將其與用戶的輸入進行比較。如果用戶輸入的州代碼與用戶輸入的產品代碼相關的州代碼不匹配,則會返回錯誤消息。試圖訪問ASP中的Linq查詢結果MVC

但是,我被困在如何從「課程」變量中訪問StateCode字段。使用Visual Studio我可以遍歷代碼並查看其中的值(同時通過本地窗口/讀數檢查),但是我不知道如何獲取我正在查找的值。

這是我第一次使用Linq,所以任何和所有的幫助/建議將不勝感激。謝謝!

   var course = from c in db.AgentContEd 
          where c.CourseCode == agentconted.CourseCode 
          select c; 

       if (agentconted.StateCode.Equals(course.StateCode)) 
       { 
        db.AgentContEd.Add(agentconted); 
        db.SaveChanges(); 
        return RedirectToAction("Details", "Agent", new { id = agentconted.SymetraNumber }); 
       } 
       else 
       { 
        ViewBag.ErrorMessaeg = "State code must match Product Training state code"; 
       } 

回答

5

當您改爲需要單個實體時,您正在拉回IQueryable<T>。如果您的查詢不產生結果記錄,課程將設置爲空。返回多個記錄的查詢將引發異常。

(from c in db.AgentContEd 
where c.CourseCode == agentconted.CourseCode 
select c) 
.SingleOrDefault(); 
+0

這引發錯誤:「序列包含多個元素」 – NealR

+1

沒關係,我只是意識到我從錯誤的表/模型拉。感謝您的幫助! – NealR

+0

@NealR,這現在能解決你的問題嗎? – andleer

0

還值得注意的是,如果你的CourseCode不是由唯一鍵約束的約束,你要麼需要使用FirstOrDefault或在try/catch塊包裹查詢,因爲如果超過SingleOrDefault將拋出錯誤返回一個結果。