如何用相交来优化linq查询?

时间:2012-02-15 17:05:21

标签: linq optimization query-optimization

当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);
}

1 个答案:

答案 0 :(得分:2)

我可能误解了你的代码,但据我所知,Intersect操作的结果将与priceResults具有相同的对象列表 - 因此Intersect是完全没必要的(因此删除它将是一个非常优化) 。 : - )

除非priceResults列表在输入此代码块之前有内容,否则它只有查询列表中的对象,因此查找两者之间的交集将始终生成priceResults列表。