传递两个查询';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>  
    }
}

传递两个查询';s转换为视图,没有GetEnumerator

您更改了问题。对于这个错误的解决方案可能是删除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();
    }
}