C# ASP.NET MVC3:从MVC视图应用SELECT/WHERE语句
我有viewbagC# ASP.NET MVC3:从MVC视图应用SELECT/WHERE语句,c#,asp.net-mvc-3,view,C#,Asp.net Mvc 3,View,我有viewbagviewbag.RoomBooks中包含的项目列表 例如: 我想要所有带有ViewBag.Roombookings.RoomNo=6和ViewBag.Roombookings.Time
viewbag.RoomBooks中包含的项目列表
例如:
我想要所有带有ViewBag.Roombookings.RoomNo=6和ViewBag.Roombookings.Time
循环通过是不行的
而且必须在视图上完成,因为我还需要访问所有其他房间预订以填充时间表
或者,我在想哈希表?在那里我可以列出它与RoomNo,时间和访问它的方式。但如果可能的话,我找不到任何关于这方面的好文件
我尝试了一些方法(只是为了测试一种有效的方法(这些方法不会遵循与上面相同的标准)):
var RoomBookingsTemp=ViewBag.RoomBookings;
var newlist=(来自RoomBookingsTemp中的RoomOcc,其中RoomOcc.EndDateTimeDateCheckStartroombooking.StartDateTime&&roombooking.RoomNo==RoomNo);
var newlist=RoomBookingsTemp.Select(m=>m[“RentalNo”]);
但是没有一个是有效的。第二种方法有什么问题?您只是缺少选择
// Some statements removed from where for clarity
var bookings = RoomBookingsTemp.Where(rb => rb.RoomNo == 6).Select(rb => rb);
您需要强制转换RoomBookingsTemp变量。当您直接从ViewBag声明它时,它仍然是一个动态类型,您看到的错误是linq不能查询/迭代动态类型
我不确定你实际使用的是哪种类型,但试试这样的
var RoomBookingsTemp = ViewBag.RoomBookings as List<RoomBooking>;
var RoomBookingsTemp=ViewBag.RoomBookings作为列表;
或
List RoomBookingsTemp=ViewBag.RoomBookings;
我认为您建议的linq方法可以实现您正在尝试的目标。你能说明是什么让你说它无效吗?在控制器中可以正常工作,但在视图中不行。如果linq是第一个,则“不允许源类型“dynamic”上的查询表达式”。其他2给出了“如果不首先将lambda表达式强制转换为委托或表达式树类型,则无法将lambda表达式用作动态调度操作的参数”,引用了您的问题中的一些令人担忧的短语:我在viewbag和中包含了项目列表,并且必须在视图上执行该操作。对我来说,使用ViewData/ViewBag和在视图中编写复杂的代码是两种非常糟糕的做法。视图用于表示,不应包含逻辑。在控制器中创建所需的结构,并将其显示在视图中“如果不首先将lambda表达式强制转换为委托或表达式树类型,则无法将lambda表达式用作动态调度操作的参数”您能否显示从ViewBag声明RoomBookingsTemp的代码。var RoomBookingsTemp=ViewBag.RoomBookings
这是因为ViewBag是动态的。使用静态类型的视图模型(我强烈推荐)或尝试:List RoomBookingsTemp=ViewBag.RoomBookings;//假设ViewBag.RoomBookings是一个RoomBookings列表,我发誓我试过了。再想一想,也许我忽略了一个事实,那就是它是一个自定义对象列表。干杯
var RoomBookingsTemp = ViewBag.RoomBookings as List<RoomBooking>;
List<RoomBooking> RoomBookingsTemp = ViewBag.RoomBookings;