传递两个查询';s转换为视图,没有GetEnumerator
本文关键字:转换 视图 GetEnumerator 没有 查询 两个 | 更新日期: 2023-09-27 18:25:35
我有一个由实体框架填充的预订类,我想对表运行不同的查询,并将它们都返回到视图中。我读过关于使用类来组合它们的文章,但我很难让它发挥作用。。。
感谢的帮助
错误
foreach语句无法对"ITAPP.Models.Bookings"类型的变量进行操作,因为"ITAPP.Models.Booking"不包含"GetEnumerator"的公共定义
类别
namespace ITAPP.Models
{
public class Bookings
{
public List<tblBooking> BookedIn { get; set; }
public List<tblBooking> BookedOut { get; set; }
}
}
用法(对于使用相同的查询测试im,我将在之后使用输入/输出查询)
var tblBookings = from d in db.tblBookings.Include(t => t.Equipment).Include(t => t.tblUser)
where (d.Equipment.Bookable == true ) &&
(d.Equipment.Deleted == false) &&
(d.Equipment.DecommissionDate == null || d.Equipment.DecommissionDate == dateBlank1 || d.Equipment.DecommissionDate == dateBlank2)
select d;
Bookings Bookings = new Bookings();
Bookings.BookedIn = tblBookings.ToList();
Bookings.BookedOut = tblBookings.ToList();
return View("Loaned", Bookings);
查看
@model ITAPP.Models.Bookings
@foreach (var item in Model) {
foreach (var inItem in item.BookedIn)
{
<td>
@Html.DisplayFor(modelItem => inItem.tblUser.FullName)
</td>
<td>
@Html.DisplayFor(modelItem => inItem.BookFrom)
</td>
<td>
@Html.DisplayFor(modelItem => inItem.BookTo)
</td>
}
}
您更改了问题。对于这个错误的解决方案可能是删除foreach外循环,这个:
@foreach (var item in Model)
因为您的视图模型不是IEnumerable。
所以现在的内环将是
foreach (var inItem in Model.BookedIn)
类Bookings
不实现IEnumerable
,因此您无法枚举/迭代它。
你想做的事在我看来是一团糟,但你可以做到:
public class Bookings : IEnumerable<tblBooking>
{
public List<tblBooking> BookedIn { get; set; }
public List<tblBooking> BookedOut { get; set; }
public IEnumerator<tblBooking> GetEnumerator()
{
return Union().GetEnumerator();
}
private IEnumerable<tblBooking> Union()
{
return BookedIn.Union(BookedOut);
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return Union().GetEnumerator();
}
}