如何使用实体框架从数据库的前xxx行搜索

时间:2019-05-03 07:47:30

标签: c# entity-framework linq

我有一个拥有超过100万条记录的数据库,我想在该数据库中找到一个值,但是我知道这个值是在前1000条记录中找到的。

List<string> onHoldOrderslist = 
     orderList.Where(m => (m.customerId == item.customerId)
                          && (m.Marketplace == Market.US) 
                          && (m.OrderStatus == "onHold"))
              .Select(s => s.OrderId)
              .ToList();

在代码中,我不想搜索整个orderList数据库表,而只搜索顶部的xxx条记录。

我的问题是:

  1. 如何用linq完成?我找不到任何例子!
  2. 它是否可以提高查询性能?

2 个答案:

答案 0 :(得分:1)

使用

List<string> onHoldOrderslist = orderList.Where(m => (m.customerId == item.customerId) && (m.Marketplace == Market.US) && (m.OrderStatus == "onHold"))
.OrderBy(x => x.WhateverMakesSense)
.Take(1000)
.Select(s => s.OrderId)
.ToList();

请注意排序很重要,否则您可能会随机获得1000个元素...

答案 1 :(得分:0)

鉴于您说这是“一条记录”,而您只返回了一条,不必担心它在前1000名之内(除非您指定顺序,否则top甚至没有任何意义)。在where子句之后使用Take(1000)将无济于事,因为无论如何只有一条记录。您只需要一个索引,在这种情况下,索引就是customerIdMarketplaceOrderStatus