如何使用依赖项注入和存储库模式实现新方法

时间:2019-06-17 04:16:49

标签: c# asp.net-mvc dependency-injection repository-pattern

我正在尝试实现一种方法,在其中选择属于正确StateId(NJ,DE,PA)的所有记录;我正在使用依赖注入和新的存储库设计模式。

这就是我的控制器中的内容:

private IWorkOrderRepository _workOrderRepository;

public DependencyInjectionController(IWorkOrderRepository workOrderRepository)
{
    _workOrderRepository = workOrderRepository;
}

public IActionResult WorkOrders()
{
    var model = _workOrderRepository.GetWorkOrders();
    return View(model);
}

public IActionResult Nj(string LocationFilter)
{
    var locations = _workOrderRepository.GetWorkOrders().Select(x => x.StateId == LocationFilter).ToList();
    return View(locations);
}

GetWorkOrders方法按预期的方式工作。 这是我的模特:

public class WorkOrderContext : DbContext
{
    public DbSet<WorkOrder> WorkOrder { get; set; }

    public WorkOrderContext(DbContextOptions<WorkOrderContext> options)
      : base(options)
    {

    }

}

public class WorkOrder
{

    [Key]
    public int UserId { get; set; }

    public string LocationId { get; set; }

    public string Reason { get; set; }

    public bool IsActive { get; set; } = true;

    public DateTime Date { get; set; } = DateTime.Now;

    public string StateId { get; set; } 

} 

我碰到路线时遇到的错误是:

  

“传递给ViewDataDictionary的模型项的类型为'System.Collections.Generic.List 1[System.Boolean]', but this ViewDataDictionary instance requires a model item of type 'System.Collections.Generic.IEnumerable 1 [WorkOrderServices.Models.WorkOrder]'。”

1 个答案:

答案 0 :(得分:4)

Select正在将工作单列表转换为布尔值:true其中StateId与位置过滤器匹配,而false没有。

您要使用WhereWhere(x => x.StateId == LocationFilter) 过滤而不是转换列表。