C#:返回符合条件的任何项目
本文关键字:任何 项目 条件 返回 | 更新日期: 2024-10-19 23:16:00
我有一个这样的方法:
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的列表。
问题是,它返回的是所有斑点或NONE斑点,而不仅仅是可用的斑点。这是由于.Any方法造成的。如何过滤掉不可用的露营盆?
试试这样的东西:
var query2 = db.Spots.Where(c => db.Reservations
.Where(r => c.CampingSpotId == r.CampingSpotId)
.All(r => DbFunctions.TruncateTime(LeaveDate) <= DbFunctions.TruncateTime(r.ArrivalDate)
|| DbFunctions.TruncateTime(ArrivalDate) >= DbFunctions.TruncateTime(r.LeaveDate))
)).ToList();
内部的Where
声明说我们只检查适用于该露营地的预订,而All
声明则进行检查,以确保该营地的每个预订都在我们感兴趣的窗口之外。