Asp.net mvc 使用Linq加载和过滤大量数据

Asp.net mvc 使用Linq加载和过滤大量数据,asp.net-mvc,linq,entity-framework-6,Asp.net Mvc,Linq,Entity Framework 6,我正在做一个项目,有人告诉我,每个地区都可能有大量的数据。我担心一旦我们上线,应用程序可能会很慢。因此,我要求QA团队进行负载测试。经理拒绝了,因为他们没有工具和/或资源来做这件事。我想得到一些关于我可以做什么来优化代码的反馈 List<order> result = null; List<order> regionOrder = null; switch (region) { case "NorthEast": regionOrder = db

我正在做一个项目,有人告诉我,每个地区都可能有大量的数据。我担心一旦我们上线,应用程序可能会很慢。因此,我要求QA团队进行负载测试。经理拒绝了,因为他们没有工具和/或资源来做这件事。我想得到一些关于我可以做什么来优化代码的反馈

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);
}
我正在考虑将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);
}
列表结果=null;
列表区域顺序=空;
交换机(区域)
{
“东北”案:
regionOrder=db.orders.Where(x=>x.Name==region.ToList();
打破
“东南”案:
regionOrder=db.orders.Where(x=>x.Name==region.ToList();
打破
}
if(order.Name.IsNotNull()&&order.Location.IsNotNull()&&order.DateOrdered!=null)
{
结果=regionorder.Where(x=>x.Name==order.Name&&x.Location==order.Location&&x.DateOrdered==order.DateOrdered);
}
else if(order.Name.IsNotNull()&&order.Location.IsNotNull())
{
结果=regionOrder.Where(x=>x.Name==order.Name&&x.Location==order.Location);
}else if(order.Name.IsNotNull()&&order.DateOrdered!=null)
{
结果=regionOrder.Where(x=>x.Name==order.Name&&x.DateOrdered==order.DateOrdered);
}else if(order.Location.IsNotNull()&&order.DateOrdered!=null)
{
结果=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())
{
结果=regionOrder.Where(x=>x.Location==order.Location);
}
else if(order.DateOrdered!=null)
{
结果=regionOrder.Where(x=>x.DateOrdered==order.DateOrdered);
}
使用
.ToList()
意味着它将数据库中的所有记录读取到内存集中。不需要所有这些
if/else
块-只需要3条
if
语句,您只需编写代码即可

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);
}
IQueryable<order> regionOrder = db.orders.Where(x => x.Name == region)
if (order.Name.IsNotNull())
{
    regionOrder = regionOrder.Where(x => x.Name == order.Name);
}
if (order.Location.IsNotNull())
{
    regionOrder = regionOrder.Where(x => x.Location == order.Location);
}
if (order.DateOrdered != null)
{
    regionOrder = regionOrder.Where(x => x.DateOrdered == order.DateOrdered);
}
IQueryable regionOrder=db.orders.Where(x=>x.Name==region)
if(order.Name.IsNotNull())
{
regionOrder=regionOrder.Where(x=>x.Name==order.Name);
}
if(order.Location.IsNotNull())
{
regionOrder=regionOrder.Where(x=>x.Location==order.Location);
}
if(order.DateOrdered!=null)
{
regionOrder=regionOrder.Where(x=>x.DateOrdered==order.DateOrdered);
}
这将转换为正确的SQL查询并仅返回所需的结果。如果要创建立即执行的内存集

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);
}
List<order> result = regionOrder.ToList();
List result=regionOrder.ToList();
使用
.ToList()
意味着它将数据库中的所有记录读取到内存集中。不需要所有这些
if/else
块-只需要3条
if
语句,您只需编写代码即可

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);
}
IQueryable<order> regionOrder = db.orders.Where(x => x.Name == region)
if (order.Name.IsNotNull())
{
    regionOrder = regionOrder.Where(x => x.Name == order.Name);
}
if (order.Location.IsNotNull())
{
    regionOrder = regionOrder.Where(x => x.Location == order.Location);
}
if (order.DateOrdered != null)
{
    regionOrder = regionOrder.Where(x => x.DateOrdered == order.DateOrdered);
}
IQueryable regionOrder=db.orders.Where(x=>x.Name==region)
if(order.Name.IsNotNull())
{
regionOrder=regionOrder.Where(x=>x.Name==order.Name);
}
if(order.Location.IsNotNull())
{
regionOrder=regionOrder.Where(x=>x.Location==order.Location);
}
if(order.DateOrdered!=null)
{
regionOrder=regionOrder.Where(x=>x.DateOrdered==order.DateOrdered);
}
这将转换为正确的SQL查询并仅返回所需的结果。如果要创建立即执行的内存集

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);
}
List<order> result = regionOrder.ToList();
List result=regionOrder.ToList();

从查询中删除
.ToList()
,这样数据就不会被具体化到内存中(但两个
大小写:
语句是相同的,所以不清楚您试图如何处理它们),您只需要3个
if
语句-
if(order.Name.IsNotNull()){result=regionOrder.Where(x=>x.Name==order.Name);};if(order.Location.IsNotNull()){…};if(order.DateOrdered!=null){…};
其中
result
IEnumerable
是,我会更改它。我对区域进行了硬编码;然后,我添加了一个参数,从下拉列表中选择区域。删除
.ToList()
从您的查询中删除,这样数据就不会具体化到内存中(但是两个
大小写:
语句是相同的,所以不清楚您试图如何处理它们),您只需要3个
if
语句-
if(order.Name.IsNotNull()){result=regionOrder.Where(x=>x.Name==order.Name);};if(order.Location.IsNotNull()){..};如果(order.DateOrdered!=null){..};
其中
result
IEnumerable
是,我将更改它。我已对区域进行了硬编码;然后,我添加了一个参数以从下拉列表中选择区域。