Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从存储库返回ASP.NET中查询的API数据_C#_Asp.net_Task - Fatal编程技术网

C# 无法从存储库返回ASP.NET中查询的API数据

C# 无法从存储库返回ASP.NET中查询的API数据,c#,asp.net,task,C#,Asp.net,Task,我试图从API返回JSON数据。 API端点为“/API/getUserSchedule(int-id)”。 它应该返回根据staffId值过滤的JSON数据,staffId值是taskSchedule表的外键 我可以使用不同的API端点返回所有数据,如图所示 但是,我需要它返回基于staffID的数据。 我创建了一个由存储库实现的接口 接口代码 public interface ITaskScheduleRepository { Task<TaskSchedule> G

我试图从API返回JSON数据。 API端点为“/API/getUserSchedule(int-id)”。 它应该返回根据staffId值过滤的JSON数据,staffId值是taskSchedule表的外键

我可以使用不同的API端点返回所有数据,如图所示

但是,我需要它返回基于staffID的数据。 我创建了一个由存储库实现的接口

接口代码

public interface ITaskScheduleRepository
{    
  Task<TaskSchedule> GetUserSchedule(int id);  
}
公共接口ITaskScheduleRepository
{    
任务GetUserSchedule(int-id);
}
存储库代码

        public async Task<TaskSchedule> GetUserSchedule(int id)
    {
        var userTaskSchedule = await _context.TaskSchedules
        .Where(s => s.staffId == id)
        .ToListAsync();                                    

         return userTaskSchedule; // error is here            
    }
public异步任务GetUserSchedule(int-id)
{
var userTaskSchedule=await\u context.TaskSchedules
.其中(s=>s.staffId==id)
.ToListAsync();
return userTaskSchedule;//此处有错误
}
控制器代码

        [HttpGet("{id}")]
    public async Task<IActionResult> GetUserTaskSchedule(int id)
    {
        var taskUserSchedule = await _repo.GetUserSchedule(id);

        if(taskUserSchedule != null)
            return Ok(taskUserSchedule);            

        return BadRequest("There are no tasks for this user");     
    }
[HttpGet(“{id}”)]
公共异步任务GetUserTaskSchedule(int id)
{
var taskUserSchedule=wait _repo.GetUserSchedule(id);
if(taskUserSchedule!=null)
返回Ok(taskUserSchedule);
return BadRequest(“此用户没有任务”);
}
错误消息

无法隐式转换类型 'System.Collections.Generic.List' 至“Schedular.API.Models.TaskSchedule”[Schedular.API]csharp(CS0029)


您正试图返回一个
列表(请注意您在存储库方法中的.ToListAsync())调用),但您的接口被定义为返回一个
任务计划。更新界面和存储库方法以返回
列表

Task GetUserSchedule(int-id)

public异步任务GetUserSchedule(int-id)

但是,如果员工只能有一个计划,请将存储库查询更改为返回单个项目,而不是项目列表

var userTaskSchedule = await _context.TaskSchedules
    .Where(s => s.staffId == id)
    .FirstOrDefaultAsync();                                    

     return userTaskSchedule; /

您需要1个
TaskSchedule
实例,而不是
ToListAsync
将返回的列表

改变

public async Task<TaskSchedule> GetUserSchedule(int id)
{
    var userTaskSchedule = await _context.TaskSchedules
        .Where(s => s.staffId == id)
        .ToListAsync();                                    

    return userTaskSchedule;
}
public异步任务GetUserSchedule(int-id)
{
var userTaskSchedule=await\u context.TaskSchedules
.其中(s=>s.staffId==id)
.ToListAsync();
返回用户任务时间表;
}
对此

public Task<TaskSchedule> GetUserSchedule(int id)
{
    return _context.TaskSchedules.SingleOrDefaultAsync(s => s.staffId == id);
}
公共任务GetUserSchedule(int-id) { 返回_context.TaskSchedules.SingleOrDefaultAsync(s=>s.staffId==id); }
注意,我删除了
async/await
,因为这里不需要它。您可以直接返回调用方等待的
任务
实例。如果需要在返回实例之前在此方法中对其执行某些操作,则可以在返回实例之前添加back
async/await
,并对其进行修改

如果返回任务,在方法名称中添加
Async
作为后缀也是一种良好的做法。示例:
GetUserScheduleAsync
而不是
GetUserSchedule



您还可以使用
FirstAsync
FirstOrDefaultAsync
SingleAsync
而不是
SingleAsync
。哪一个取决于您在代码中的需求。

var userTaskSchedule=wait\u context.TaskSchedules.SingleAsync(s=>s.staffId==id)← 你想要的是1张,不是一张单子。非常感谢你,这就解决了我的问题。但是为什么我不需要将控制器从一个任务更新到另一个任务fwiw,我同意下面的@igor。这里函数的更好名称可能是类似于
Task GetTaskSchedulesByStaffId(int-staffId)
。从长远来看,它使维护/记住哪些方法更容易!哦,要回答您的后续问题,这是因为您没有返回
IActionResults
列表,只返回一个。您的
IActionResult
是从任务计划列表中创建的单个JSON响应字符串:)谢谢,Igor,返回可能是一个列表,因为我的返回类型的员工可以有多个任务。Tommy的回答解决了我的问题,但知道如何处理单个任务返回很有趣。@GolfBravo然后我强烈建议您更改方法名和变量名,使它们不是单数而是复数。