在何处或包含查询优化

时间:2016-04-05 12:00:37

标签: sql-server linq

我正在尝试优化在linq中使用contains子句到实体的查询,下面是场景

using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    int?[] productModelIds = {19, 26, 118};
    var products = from p in AWEntities.PrdTransacation
                   where productModelIds.Contains(p.ProductModelID)
                   select p;
    foreach (var product in products)
    {
        Console.WriteLine("{0}: {1}", product.ProductModelID, product.ProductID);
    }
}

我完全有类似的查询,但productModelIds包含2000个条目,而PrdTransacation包含500万行。

我已经阅读了stackoverflow,其中人们推荐包含不应该有十几个参数。但除此之外还有其他解决方案吗?

1 个答案:

答案 0 :(得分:0)

我不推荐。

使用Contains将其翻译成IN子句。因此,如果您查看此link的“备注”部分,您会看到Microsoft建议在表格中加载值。

当然,这不是你的情况。从代码我假设您正在使用Entity Framework,并假设您使用的是SQL Sever,我建议您创建一个表值用户定义的函数并传递您的ID列表。

我会将您的方法仅用于少数项目