【发布时间】:2016-06-02 23:51:58
【问题描述】:
我正在做一个项目,我被告知可能有来自每个地区的大量数据。我担心一旦我们上线,应用程序可能会很慢。因此,我要求 QA 团队进行负载测试。经理说不,因为他们没有工具和/或资源来做这件事。我想获得一些关于我可以做些什么来优化代码的反馈。
我正在考虑将 if 语句移动到它自己的方法中,以便可以从传递区域的 switch case 调用它。然后,在 if 语句中,我将执行 LINQ to 传递表达式的方法语法。而不是 regionOrder.Where,它将是 db.orders.where(根据搜索首选项传递名称、位置和日期。
List<order> result = null;
List<order> regionOrder = null;
switch (region)
{
case "NorthEast":
regionOrder = db.orders.Where(x => x.Name == region).ToList();
break;
case "SouthEast":
regionOrder = db.orders.Where(x => x.Name == region).ToList();
break;
}
if (order.Name.IsNotNull() && order.Location.IsNotNull() && order.DateOrdered != null)
{
result = regionorder.Where(x => x.Name == order.Name && x.Location == order.Location && x.DateOrdered == order.DateOrdered);
}
else if (order.Name.IsNotNull() && order.Location.IsNotNull())
{
result = regionOrder.Where(x => x.Name == order.Name && x.Location == order.Location);
} else if (order.Name.IsNotNull() && order.DateOrdered != null)
{
result = regionOrder.Where(x => x.Name == order.Name && x.DateOrdered == order.DateOrdered);
} else if ( order.Location.IsNotNull() && order.DateOrdered != null)
{
result = regionOrder.Where(x => x.Location == order.Location && x.DateOrdered == order.DateOrdered);
} else if (order.Name.IsNotNull())
{
result = regionOrder.Where(x => x.Name == order.Name);
}
else if (order.Location.IsNotNull())
{
result = regionOrder.Where(x => x.Location == order.Location);
}
else if (order.DateOrdered != null)
{
result = regionOrder.Where(x => x.DateOrdered == order.DateOrdered);
}
【问题讨论】:
-
从您的查询中删除
.ToList(),以便数据不会具体化到内存中(但两个case:语句是相同的,因此不清楚您要如何处理) -
你只需要 3 个
if语句 -if (order.Name.IsNotNull()) { result = regionOrder.Where(x => x.Name == order.Name); }; if (order.Location.IsNotNull()) { .... }; if (order.DateOrdered != null) { ... };其中result是IEnumerable<order> -
是的,我会改变它。我对区域进行了硬编码;然后,我添加了一个参数以从下拉列表中选择区域。
标签: asp.net-mvc linq entity-framework-6