我正在尝试根据给定日期返回一组结果,如果该日期不存在,那么我想将结果从过去的日期返回到该日期。
我正在尝试从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);
}
是否可以保存数据库之旅并构建一个返回相同结果的查询?或者也许比我现在正在做的更快。
答案 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方法都会在后台执行一个循环,你创建的循环越多,运行的就越慢。