簡體   English   中英

如何限制顯示的行數

[英]How do I limit the number of rows displayed

我構造以下查詢以顯示來自 Json 的數據。假設此查詢返回 50 行。 但我只想顯示前 10 行。
在這種情況下, select top 10limit 10名的等價物是什么。 謝謝你。

List<Item> result = items.GroupBy(x => x.ItemNo)
       .Select(x => new Item
        {
            ItemNo = x.Key,
            ItemName = x.FirstOrDefault(y => y.Key == "ItemName")?.Value,           
            Date = x.FirstOrDefault(y => y.Key == "Date")?.Value
        }).OrderByDescending(y => y.date)
.ToList();

我認為您正在尋找的方法是 Take

取自微軟網站的方法

最后我認為你的代碼應該是這樣的:

List<Item> result = items.GroupBy(x => x.ItemNo)
   .Select(x => new Item
    {
        ItemNo = x.Key,
        ItemName = x.FirstOrDefault(y => y.Key == "ItemName")?.Value,           
        Date = x.FirstOrDefault(y => y.Key == "Date")?.Value
    }).OrderByDescending(y => y.date).Take(10).ToList();

在對數據管道的任何查詢中,您都不應請求該批次。 為什么? 您不知道查詢中有多少條記錄。 您可能認為只有幾行,但如果DBAdmin做錯了什么,客戶表中可能有 1000 萬行。

因此,使用 Request 查詢 object 來請求您的數據,其中包含一些默認設置的邊界條件值。

public record ListQueryRequest {

    public int StartIndex { get; init; } = 0;

    public int PageSize { get; init; } = 1000;
}

然后,您的數據管道服務可以執行以下操作:

private async ValueTask<ListRequestResult<TRecord>> GetItemsAsync<TRecord>(ListQueryRequest listQuery)
{

   using var dbContext = this.factory.CreateDbContext();
   dbContext.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;

   IQueryable<TRecord> query = dbContext.Set<TRecord>();

   /.... any IQueryable conditions such as filtering or ordering

   query = query
     .Skip(listQuery.StartIndex)
     .Take(listQuery.PageSize);
   

  // delayed execution of the query
   var list = await query.ToListAsync(); 
  
   // build and return your request result
}

結果 object 模板如下所示:


public record ListQueryResult<TRecord>
{
   public bool Successful {get; init;}
   public string Message {get; init;}
   public IEnumerable<TRecord> Items {get; init;}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM