gpt4 book ai didi

c# - 完整数据集而不是 Top 1000 EF Core

转载 作者:行者123 更新时间:2023-11-30 18:12:01 26 4
gpt4 key购买 nike

我正在尝试从表中返回前 1000 行,但是使用 EF Core,我在 .Take(1000) 运行之前获得了完整的数据集。

API

[HttpGet("MyThing/{id}")]
public List<MyObj> ItemsReport(long id)
{
response = new List<MyObj>();
response = _reporting.GetNewEntries(id);
return response;
}

报告

public virtual List<MyObj> GetNewEntries(long id)
{
var newEntries = new List<MyObj>();

var entries = _DbContext.ReportNewEntries
.OrderBy(a => long.Parse(a.Id))
.Where(a => long.Parse(a.Id) > id)
.Take(1000);

newEntries.AddRange(entries);

return newEntries;
}

DbContext

DbSet<MyObj> ReportNewEntries{ get; set; }

我想要的查询是这样的:

SELECT TOP (1000) * 
FROM dbo.ReportNewEntries
WHERE CONVERT(bigint, Id) > 0
ORDER BY CONVERT(bigint, Id)

根据 SQL 分析器,我当前的查询是:

SELECT * FROM dbo.ReportNewEntries 

该表是整体式的,所以我想一次访问 1000 行。对我犯的错误有什么建议吗?

最佳答案

当您使用 List ,您正在使用 Linq-To-Object,它适用于 IEnumerable .

事实上,IEnumerable将首先加载内存中的所有数据,然后再对其应用 Take。

你要用的是IQueryable ,即 Linq-to-Sql

因此要么修改您的方法以返回 IQueryable<MyObj> ,或使用 AsQueryable() 调用您的 Linq 链像这样:

var entries = _DbContext.ReportNewEntries.AsQueryable()
.OrderBy(a => long.Parse(a.Id)).Where(a => long.Parse(a.Id) > id).Take(1000);

关于c# - 完整数据集而不是 Top 1000 EF Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56166232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com