【问题标题】:C#: Return any item that matches the conditionC#:返回任何符合条件的项目
【发布时间】: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 =&gt; ... 但你没有在任何地方使用 c,所以 Any 条件总是评估相同的东西。您需要在 lambda 中的某处使用 c,但不知道点与预订有何关系,这很难提供帮助。您可能需要在预订中添加Where 子句来选择属于c 的预订。
  • 我想如果我将&amp;&amp; c.CampingSpotId == r.CampingSpotId 添加到表达式中会有所帮助,但恐怕不会。关于如何进行的任何想法?
  • 嗯,你肯定需要它来获得正确的结果。也许你的其他情况有问题。我注意到你正在使用 && 和 ||,但通常像 a &amp;&amp; b || c 这样的操作顺序等同于 (a &amp;&amp; b) || c,但也许你想要 a &amp;&amp; (b || c)。尝试在您的条件中加上括号,看看是否能解决您的问题。
  • 在我添加 &amp;&amp; c.CampingSpotId == r.CampingSpotId 之前,我的其余条件评估良好,这与括号的位置或位置无关。
  • 你确定你写的是正确的条件..??到达日期和离开日期

标签: c# asp.net sql-server linq asp.net-mvc-5


【解决方案1】:

试试这样的:

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

【讨论】:

  • 太棒了。在 All 之后,我只需要添加 All(r =&gt; ...) 那 .All 声明就是我想要的。谢谢!
猜你喜欢
  • 2014-05-08
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多