我正在构建一个使用Entity Framework 4.1的ASP.Net MVC 3 Web应用程序。我还使用工作单元模式和通用存储库。我的模型中有两个实体, Shift 和 ShiftDate 。请参阅下图了解其结构。我们的想法是, Shift 可以有1个或多个 ShiftDates ,而 ShiftDate 只能属于一个 Shift
我希望创建一个查询,返回所有班次的列表,如此
public IList<Shift> GetShifts(int id)
{
return _UoW.Shifts.Get(s => s.organisationID == id).OrderBy(s => s.startDate).ToList();
}
然后在我的Razor View中,我希望使用foreach循环并列出每个Shift的详细信息。其中一个细节是每个 Shift 的 ShiftDates 的总数。要做到这一点,我会做类似
的事情foreach(var shiftDate in Model.Shifts)
{
@Html.DisplayFor(modelItem => item.ShiftDates.Count)
}
这很好,但是,我希望计数排除其ShiftDateStatusID设置为442的 ShiftDates 。为此,我尝试修改我的Linq查询到此
return _UoW.Shifts.Get(s => s.organisationID == id && s.ShiftDates.Any(sd => sd.shiftDateStatusID != 442))
.OrderBy(s => s.startDate).ToList();
然而,这仍然会拉回ShiftDateStatusID为442的ShiftDates。
希望这是有道理的。
非常感谢任何反馈。
感谢。
答案 0 :(得分:1)
如果你这样做
_UoW.Shifts.Get(s => s.organisationID == id
&& s.ShiftDates.Any(sd => sd.shiftDateStatusID != 442)
你得到的班次至少有一个ShiftDate
除了442之外还有shiftDateStatusID
。那么,可能会有很多变化符合这个条件。这些班次的ShiftDates
集合将被完全加载,包括442(如果有的话)。
要么在填充视图模型时排除状态为442的ShiftDate
,要么仅在计数时排除它们,在进行计数时将其排除在外:
item.ShiftDates.Count(sd => sd.shiftDateStatusID != 442)