linq限制和过滤大量结果

时间:2013-08-08 21:12:19

标签: asp.net linq filter

我在数据库中有大量数据。我想过滤结果并获得特定数量的产品

例如:PageSize = 100。我想在每个页面上获得100个产品,产品的描述包含字符串“Laptop”

Products = repository.Products
           .OrderByDescending(p => p.Date)
           .Where(x=>x.Description.Contains("%Laptop%")
           .Skip((page - 1) * PageSize)
           .Take(PageSize);

此查询超时,因为查询在检索前100个产品之前过滤了大量结果

但如果我写

Products = repository.Products
               .Skip((page - 1) * PageSize)
               .Take(PageSize)
               .OrderByDescending(p => p.Date)
               .Where(x=>x.Description.Contains("%Laptop%");

然后第1页没有100个产品,因为查询首先重试100个产品然后过滤

如何检索100个产品(包含字符串“Laptop”)并且没有超时错误?

1 个答案:

答案 0 :(得分:2)

首先是

Where,然后是下订单,之后再去。

像这样:

Products = repository.Products
               .Where(x=>x.Description.Contains("Laptop");
               .OrderByDescending(p => p.Date)
               .Skip((page - 1) * PageSize)
               .Take(PageSize)

注意,包含变为like %input%,因此无需用% s包围它;)