返回最近日期的结果如果给定使用LINQ

时间:2017-04-28 12:10:29

标签: c# 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);
        }

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

2 个答案:

答案 0 :(得分:2)

您可能不需要if .. else。使用复合条件可将其降低到以下

         itemsList = context.MenuItems
                .Where(d => d.Date == availableDate && (!vreauTOT && d => !d.OnlyExternal))
                .ToList();

答案 1 :(得分:1)

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方法都会在后台执行一个循环,你创建的循环越多,运行的就越慢。