0

EntityFramework4.1を使用するASP.NetMVC3Webアプリケーションを構築しています。また、汎用リポジトリで作業ユニットパターンを使用します。モデルには、ShiftShiftDateの2つのエンティティがあります。それらの構造については、下の図を参照してください。つまり、Shiftには1つまたは複数のShiftDateを含めることができ、ShiftDateは1つのShiftにのみ属することができます。

ここに画像の説明を入力してください

そのようなすべてのシフトのリストを返すクエリを作成したい

public IList<Shift> GetShifts(int id)
{
   return _UoW.Shifts.Get(s => s.organisationID == id).OrderBy(s => s.startDate).ToList();
}

次に、Razorビューで、foreachループを使用して、各Shiftの詳細を一覧表示したいと思います。これらの詳細の1つは、各シフトが持つShiftDateの総数です。これを行うために私は次のようなことをします

foreach(var shiftDate in Model.Shifts)
{
    @Html.DisplayFor(modelItem => item.ShiftDates.Count)
}

これは正常に機能しますが、shiftDateStatusIDが442に設定されているShiftDateをカウントで除外する必要があります。これを行うには、Linqクエリをこれに修正してみました。

return _UoW.Shifts.Get(s => s.organisationID == id && s.ShiftDates.Any(sd => sd.shiftDateStatusID != 442))
.OrderBy(s => s.startDate).ToList();

ただし、これでも、shiftDateStatusIDが442のShiftDatesはプルバックされます。

うまくいけば、これは理にかなっています。

フィードバックをいただければ幸いです。

ありがとう。

4

1 に答える 1

1

もし、するなら

_UoW.Shifts.Get(s => s.organisationID == id
                     && s.ShiftDates.Any(sd => sd.shiftDateStatusID != 442)

少なくとも1つが442以外のシフトを持っているシフトを取得しますShiftDateshiftDateStatusIDまあ、おそらくこの条件を満たすシフトはたくさんあります。これらのシフトのShiftDatesコレクションは、442のコレクション(存在する場合)を含め、完全にロードされます。

ShiftDateビューモデルにデータを入力するときにステータス442のsを除外する必要があるか、カウント専用の場合は、カウントを行うときにそれらを除外します。

item.ShiftDates.Count(sd => sd.shiftDateStatusID != 442)
于 2012-10-19T15:17:57.363 に答える