0

我正在构建一个使用 Entity Framework 4.1 的 ASP.Net MVC 3 Web 应用程序。我还将工作单元模式与通用存储库一起使用。我的模型中有两个实体,ShiftShiftDate。请参阅下图了解它们的结构。这个想法是,一个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 视图中,我希望使用 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。

希望这是有道理的。

任何反馈将不胜感激。

谢谢。

4

1 回答 1

1

如果你这样做

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

你得到的班次至少ShiftDate有一个shiftDateStatusID不是 442。好吧,可能有很多班次满足这个条件。这些班次的ShiftDates集合将被完全加载,包括具有 442(如果有)的那些。

ShiftDate当您填充视图模型时,您必须排除状态为 442 的s,或者当它仅用于计数时,在您进行计数时排除它们:

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