我正在尝试优化在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,其中人们推荐包含不应该有十几个参数。但除此之外还有其他解决方案吗?
答案 0 :(得分:0)
我不推荐。
使用Contains
将其翻译成IN
子句。因此,如果您查看此link的“备注”部分,您会看到Microsoft建议在表格中加载值。
当然,这不是你的情况。从代码我假设您正在使用Entity Framework,并假设您使用的是SQL Sever,我建议您创建一个表值用户定义的函数并传递您的ID列表。
我会将您的方法仅用于少数项目。