0

使用include语句时如何在linq中选择“谷仓门打开”的状态名称?

// GET: /Cowbow/Farm/
public ActionResult IndexNew()
{
    var barns = dbFarm.Barn.Include(b => b.Dog).Include(b => b.Cat).Include(b => b.Pig).Include(b => b.Cow).Include(b => b.Chicken).Include(b => b.Feed);
    // return View(barns.ToList()); // normal scaffold generated return
 return View(barns.Where(b => b.Statuses.Where(s => s.statusName == "barn doors open")).AsEnumerable().ToList());

}

Barn 也有一个 Status.StatusName 字段,该字段与 barnid 具有外键关系。它还有两个可能的状态名称,“谷仓门打开”和“谷仓门关闭”,以及状态发生的日期字段和 id 字段。我只能在谷仓门打开时添加农场动物。

不确定这是否是正确的想法,因为每个谷仓可能有多个状态。

我如何只列出那些在状态名称为“谷仓门打开”的日期之前发生的最后状态的谷仓?

我试图添加一个 .FirstDefault 但我希望所有包含“谷仓门打开”的谷仓而不仅仅是第一个谷仓。

4

2 回答 2

1

如果我正确理解你,在某一时刻你的谷仓可能只有一种状态(打开或关闭)。所以你不需要多对多的关系。写吧:

return View(barns.Where(a => a.Status.statusName == "barn doors open").AsEnumerable().ToList());
于 2013-08-06T19:22:17.193 回答
1

你在找这个……?:

return View(barns
    .Where(b => b.Statuses
        .Where(s => s.statusName == "barn doors open" && 
            s.TimeStap == b.Statuses.Max(st => st.TimeStamp))
    .AsEnumerable().ToList());

你也不需要打电话.AsEnumerable()

于 2013-08-12T19:19:17.103 回答