0

エンティティ フレームワークによって設定された予約クラスがあります。テーブルに対してさまざまなクエリを実行し、両方をビューに返したいと考えています。クラスを使用してそれらを結合することについて読んだことがありますが、これを機能させるのに問題があります...

助けてくれてありがとう

エラー

「ITAPP.Models.Bookings」には「GetEnumerator」のパブリック定義が含まれていないため、foreach ステートメントは「ITAPP.Models.Bookings」タイプの変数を操作できません

クラス

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

使用法(両方に同じクエリを使用してテストするため、後でin/outクエリを使用します)

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 に答える