[英]How do I limit the number of rows displayed
我構造以下查詢以顯示來自 Json 的數據。假設此查詢返回 50 行。 但我只想顯示前 10 行。
在這種情況下, select top 10
或limit 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.