【发布时间】:2015-05-08 10:45:12
【问题描述】:
我有这样的方法:
public ActionResult ShowAvailableSpots(int Id, DateTime ArrivalDate, DateTime LeaveDate)
{
var query2 = db.Spots
.Where(c => db.Reservations.Any(r =>
DbFunctions.TruncateTime(ArrivalDate) <= DbFunctions.TruncateTime(r.ArrivalDate) && DbFunctions.TruncateTime(LeaveDate) <= DbFunctions.TruncateTime(r.ArrivalDate)
|| DbFunctions.TruncateTime(ArrivalDate) >= DbFunctions.TruncateTime(r.LeaveDate)
)).ToList();
ViewBag.StartingDate = ArrivalDate;
ViewBag.EndingDate = LeaveDate;
ViewBag.AvailableSpots = query2;
ViewBag.CampingSpotId = new SelectList(query2, "CampingSpotId", "SpotName");
return View();
}
它确定是否有任何预订符合日期标准。如果它们不匹配,则返回包含 Campingspots 的列表。
问题是,它返回的是所有点或无点,而不仅仅是可用的点。这是由于 .Any 方法。如何过滤掉不可用的露营点?
【问题讨论】:
-
在你的 lambda 中,你有
c => ...但你没有在任何地方使用c,所以Any条件总是评估相同的东西。您需要在 lambda 中的某处使用c,但不知道点与预订有何关系,这很难提供帮助。您可能需要在预订中添加Where子句来选择属于c的预订。 -
我想如果我将
&& c.CampingSpotId == r.CampingSpotId添加到表达式中会有所帮助,但恐怕不会。关于如何进行的任何想法? -
嗯,你肯定需要它来获得正确的结果。也许你的其他情况有问题。我注意到你正在使用 && 和 ||,但通常像
a && b || c这样的操作顺序等同于(a && b) || c,但也许你想要a && (b || c)。尝试在您的条件中加上括号,看看是否能解决您的问题。 -
在我添加
&& c.CampingSpotId == r.CampingSpotId之前,我的其余条件评估良好,这与括号的位置或位置无关。 -
你确定你写的是正确的条件..??到达日期和离开日期
标签: c# asp.net sql-server linq asp.net-mvc-5