【问题标题】:How to optimize linq query with intersect?如何使用相交优化 linq 查询?
【发布时间】:2012-03-07 01:20:44
【问题描述】:

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

【问题讨论】:

  • 什么是querypriceResults 是什么?这是 Linq2Sql、Linq2Entities、Linq2Objects 吗?

标签: linq optimization query-optimization


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2021-07-13
    • 1970-01-01
    • 2019-04-15
    相关资源
    最近更新 更多