首页 > 解决方案 > 完整数据集而不是 Top 1000 EF Core

问题描述

我正在尝试从表中返回前 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;
}

数据库上下文

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 行。对我犯的错误有什么建议吗?

标签: c#entity-framework.net-coreentity-framework-core

解决方案


你用的是什么数据库?什么版本的 .NetCore?什么数据库提供商?一些 db 提供程序可能在将一些 linq 语句转换为 sql 时遇到问题。在这种情况下,将在数据库中运行不同的查询(通常获取所有数据)并在内存中执行 linq。


推荐阅读