2015-04-05 69 views
0

我一直在試圖將值存儲在一個變量中,這取決於數據庫返回的值。 從本質上講,我想要根據房間類型來計算有多少房間,並將其存儲在其他地方使用的變量中。計數行和存儲值

我所擁有的是:

   DLDbContext context = new DLDbContext(); 
      //Counts how many versions of that room exists 
      int RoomTypes = (from u in context.Room where u.type == ddlRoomType.SelectedItem.ToString() select u).Count(); 

錯誤多數民衆贊成似乎是:

無法創建 型 'System.Web.UI.WebControls.ListItem' 的恆定值。在此上下文中僅支持基本類型或枚舉類型。

ddlRoomType是一個下拉列表,其中人員可以選擇房間類型,並根據他們選擇的內容,通過數據庫搜索實際存在的房間數量。

+0

該錯誤聽起來並不像它從發佈的代碼來。發佈的代碼中沒有任何內容試圖創建常量。 – David 2015-04-05 22:20:27

回答

1

這是因爲你是隱在這條線使用LINQ to Entities

(from u in context.Room where u.type == ddlRoomType.SelectedItem.ToString() select u).Count() 

LINQ to Entities需要你的代碼轉換成SQL。爲此,需要將ddlRoomType.SelectedItem.ToString()轉換爲constant,以便它可以包含在SQL中。實體框架無法將其轉換爲常量,這是因爲它不知道toString方法中發生了哪種處理。你到底懂不懂呢?方法需要由C#進行評估,但不進行評估,它不能成爲常量,因此它可以包含在SQL中。

試試這個:

DLDbContext context = new DLDbContext(); 
//Counts how many versions of that room exists 
var roomType = ddlRoomType.SelectedItem.ToString(); 
int RoomTypes = (from u in context.Room where u.type == roomType select u).Count(); 
+1

嗨,我很感激幫助。我現在明白了很多。這已經解決了現在的問題(還有另一個問題阻止它的工作,但是,這將工作)。謝謝! – 2015-04-05 22:29:10

+0

我個人建議使用Lambda表達式來表達LINQ表達式。最後一行將變成'var roomTypes = context.Room.Where(u => u.type == roomType).Count();'這既短又易於理解。 – 2015-04-05 22:32:17

+0

謝謝Kaspars也提供您的意見。我會把這兩個用於不同的場合。我更熟悉和使用的方式,但是,我認爲這兩種方式對未來都有幫助。 – 2015-04-05 22:39:29