如果给定的日期使用LINQ在数据库中不存在,则最接近日期的返回结果



我试图根据给定的日期返回一组结果,如果该日期不存在,那么我想将结果从壁橱中的日期返回到此。

我正在尝试返回Apicontroller的结果。我使用的方法非常慢,我敢肯定这不是最好的方法。

[HttpPost]
    public IHttpActionResult GetItemsForDate(DateDTO Date)
    {
        using (var context = new CafeteriaContext())
        {
            bool vreauTOT = Date.vreauTOT;
            var itemsList = new List<MenuItem>();
            var getDates = context.MenuItems.Where(d => d.Date == Date.Date || d.Date < Date.Date).Select(d => d.Date).ToList();
            var availableDate = getDates.OrderByDescending(t => t.Date).First();
            if (vreauTOT)
            { 
                itemsList = context.MenuItems
               .Where(d => d.Date == availableDate)
               .Select(r => r)
               .ToList();
            }
            else
            {
                itemsList = context.MenuItems
                    .Where(d => d.Date == availableDate)
                    .Where(d => d.OnlyExternal == false)
                    .Select(r => r)
                    .ToList();
            }
            return Ok(itemsList);
        }

是否可以保存到数据库的旅行,也许可以构建一个将返回相同结果的查询?或者也许比我现在正在做的更快的方法。

您可能不需要if .. else。它可以使用复合条件

将其简化为以下
         itemsList = context.MenuItems
                .Where(d => d.Date == availableDate && (!vreauTOT && d => !d.OnlyExternal))
                .ToList();
itemsList = context.MenuItems
               .Where(d => d.Date == availableDate)
               .Select(r => r)
               .ToList();

无需在此处选择。

 itemsList = context.MenuItems
                    .Where(d => d.Date == availableDate)
                    .Where(d => d.OnlyExternal == false)
                    .Select(r => r)
                    .ToList();

无需在此处选择选择。使用1位,检查那里的条件:

.Where(d => d.Date == availableDate && ! d.OnlyExternal)

说明:每个LINQ方法将在后台执行一个循环,并且您创建的循环越多,它将运行的较慢。

最新更新