C# 返回IQueryable上的204状态代码<;日志>;Web API操作

C# 返回IQueryable上的204状态代码<;日志>;Web API操作,c#,asp.net-web-api,restapi,C#,Asp.net Web Api,Restapi,我使用webapi将大量数据导出到JSON和自定义CVS解析器。一切正常,但当查询返回0条记录时,我想返回204状态代码。我找不到设置状态代码的方法,因为我返回IQueryablein action。有什么建议吗 [HttpGet] [Route("user/statistic")] public IQueryable<Log> Statistic(int userId, DateTime startDate, DateTime endDat

我使用
webapi
将大量数据导出到
JSON
自定义CVS
解析器。一切正常,但当查询返回0条记录时,我想返回
204状态代码。我找不到设置状态代码的方法,因为我返回
IQueryable
in action。有什么建议吗

   [HttpGet]
   [Route("user/statistic")]

    public IQueryable<Log> Statistic(int userId, DateTime startDate, DateTime endDate, CancellationToken cancellationToken)
    {

        var logs = _context.Find(userId, startDate, endDate);
        return logs;
    }

    public IQueryable<Log> Find(int userId, DateTime startDate, DateTime endDate)
    {
        var startDateSql = startDate.AddDays(-1).Date;
        var endDateTimeSql = endDate.AddDays(1).Date;
        return Logs.Where(w => w.UserId == userId && w.DateStamp > startDateSql && w.DateStamp < endDateTimeSql).AsNoTracking();
    }
[HttpGet]
[路线(“用户/统计”)]
公共IQueryable统计信息(int userId、DateTime startDate、DateTime endDate、CancellationToken CancellationToken)
{
var logs=_context.Find(userId、startDate、endDate);
返回日志;
}
公共IQueryable查找(int userId、DateTime startDate、DateTime endDate)
{
var startDateSql=startDate.AddDays(-1).Date;
var endDateTimeSql=endDate.AddDays(1.Date);
返回Logs.Where(w=>w.UserId==UserId&&w.DateStamp>startDateSql&&w.DateStamp
尝试在API方法中使用IAtionResult而不是Iquaryable 然后你可以有这样的东西:

public IActionResult MyApi()
{
 //if the result has any item
return Ok(result);
//otherwise
    return NoContent(); // which returns 204 status code
}

我无法实际执行IQueryable,我将它传递给格式化程序,让他们处理大量数据。在我的情况下,您建议执行整个查询,这会造成很大的性能损失。当您收到响应时,执行查询并不重要,与IActionResult没有什么不同,如果在方法中是性能优化,但通常不建议使用IEnumerable,Iquerable等对于HTTP端点的结果,那么您可以生成合理的响应OK,请将我的代码与您的代码合并,并且不要忘记插入取消令牌,以便web操作在连接断开时取消查询数据库中的数据。您很快就会发现,所有数据都是在操作中一次获取的,并且无法使用您的建议从数据库中创建块读取。这就是我使用IQueryable的原因,我找不到其他方法来解决应该返回大量fo数据的问题;值得一试