0

我有一个由实体框架填充的预订类,我想针对表运行不同的查询并将它们都返回到视图中。我读过关于使用一个类来组合它们,但我无法让它工作......

谢谢你的帮助

错误

foreach 语句不能对“ITAPP.Models.Bookings”类型的变量进行操作,因为“ITAPP.Models.Bookings”不包含“GetEnumerator”的公共定义

班级

namespace ITAPP.Models
{
    public class Bookings
    {
        public List<tblBooking> BookedIn { get; set; }
        public List<tblBooking> BookedOut { get; set; }
    }
}

用法(为了测试我对两者使用相同的查询,我将在之后使用输入/输出查询)

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>  
    }
}
4

2 回答 2

2

你改变了你的问题。对于这个错误解决方案可能是删除外部 foreach 循环,这个:

@foreach (var item in Model)

因为您的 View 模型不是IEnumerable

所以现在的内循环将是

foreach (var inItem in Model.BookedIn)
于 2013-07-31T14:29:37.540 回答
0

该类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();
    }
}
于 2013-07-31T14:50:12.880 回答