我有一个使用WhereIn的PetaPoco查询。查询如下:
var prodAttrCollForVariantSql = new Sql();
prodAttrCollForVariantSql.Select("*")
.From<ProductVariant2ProductAttributeDto>()
.InnerJoin<ProductAttributeDto>()
.On<ProductVariant2ProductAttributeDto, ProductAttributeDto>(left => left.ProductAttributeKey, right => right.Key)
.WhereIn<ProductVariant2ProductAttributeDto>(x => x.ProductVariantKey, variantKeys);
问题是,&#39; variantKeys&#39;是一个列表,可以有100到5000+的任何东西。
如何在上述查询中改进其中的性能和潜在限制?
答案 0 :(得分:0)
SQL Server有2100个参数限制。
要解决此问题,只需将列表拆分为2000个项目。 例如:
var Result = new List<Whatever>();
for (int i = 0; i < variantKeys.Count(); i+= 2000) {
Result.AddRange(db.Fetch<Whatever>("SELECT * FROM Whatever WHERE ID IN (@0)", variantKeys.Skip(i).Take(2000)));
}