我试图根据给定的日期返回一组结果,如果该日期不存在,那么我想将结果从壁橱中的日期返回到此。
我正在尝试返回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方法将在后台执行一个循环,并且您创建的循环越多,它将运行的较慢。