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方法造成的。如何过滤掉不可用的露营盆?

C#:返回符合条件的任何项目

试试这样的东西:

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声明则进行检查,以确保该营地的每个预订都在我们感兴趣的窗口之外。

相关文章: