当priceList很小时,查询会快速执行,但如果priceList有超过五个元素,则查询速度很慢。
if(!filters.Price.All && !filters.Price.IsEmpty())
{
var priceList = filters.Price.GetRangeList();
foreach (var price in priceList)
{
decimal startPrice = decimal.Parse(price[0]);
decimal endPrice = decimal.Parse(price[1]);
var priceResult = from deal in query
where (deal.DiscountPrice >= startPrice && deal.DiscountPrice <= endPrice)
select deal;
if(priceResult.Count() != 0)
priceResults = (priceResults == null) ? priceResult : priceResult.Union(priceResults);
}
query = query.Intersect(priceResults);
}
答案 0 :(得分:2)
我可能误解了你的代码,但据我所知,Intersect操作的结果将与priceResults具有相同的对象列表 - 因此Intersect是完全没必要的(因此删除它将是一个非常优化) 。 : - )
除非priceResults列表在输入此代码块之前有内容,否则它只有查询列表中的对象,因此查找两者之间的交集将始终生成priceResults列表。