计算行数和存储值

时间:2015-04-05 22:18:22

标签: c# sql asp.net linq linq-to-sql

我一直在尝试在变量中存储一个值,这取决于从数据库返回的值。 基本上,我希望它根据房间类型计算房间数量,并将其存储在一个变量中以便在其他地方使用。

我拥有的是:

                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是一个下拉列表,其中人员可以选择房间类型,并根据他们选择的内容,通过数据库搜索实际存在的房间数量。

1 个答案:

答案 0 :(得分: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方法中发生了什么样的处理。你懂这个了吗? 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();