0

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

例如:PageSize=100。我想在每个页面上获得 100 个产品,并且产品的描述包含字符串“笔记本电脑”

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”)并且不会出现超时错误?

4

1 回答 1

2

Where先下单,后取。

像这样:

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

注意, contains 变成了like %input%,所以不需要用%s 包围它;)

于 2013-08-08T21:17:38.277 回答