传入字典的模型项的类型是“System.Collections.Generic.List,如何处理?

问题描述

**错误:**传入字典的模型项的类型为“System.Collections.Generic.List1[system.int32]',but this dictionary requires a model item of type 'System.Collections.Generic.ICollection1[SlotIdentificationSystem.Models.User_Register_Event]”。


模型

namespace SlotIdentificationSystem.Models

{

public class User_Register_Event
{
    [Key]
    public int Id { get; set; }

    public int UserTableId { get; set; }
    public virtual UserTable UserTable { get; set; }

    public int SectionId { get; set; }
    public virtual Section Section { get; set; }
    public int EventTableId { get; set; }
    public virtual EventTable EventTable { get; set; }
    public int TermId{ get; set; }
    public virtual Term Term { get; set; }

}

}


控制器

 public ActionResult ShowAllDetail(int UserTableId,int UserTableId2)     //bb1234  //bb4567
    {

        var data = db.User_Register_Events.Where(x => x.UserTable.Id == UserTableId).Select(x => x.EventTable.Slot.Slot_Id).ToList();
           //data eg [11,12,13.....]
        var data2 = db.User_Register_Events.Where(x => x.UserTable.Id == UserTableId2).Select(x => x.EventTable.Slot.Slot_Id).ToList();

        //data2 eg [11,42,22.....]
      
        List<int> AllSlots = db.Slots.Select(x => x.Slot_Id).ToList();
              
        var result = AllSlots.Except(data.Union(data2)).ToList();
        return View(result);
    

          eg. //result=[72,19,41,44,...etc


    }

CSHTML

我必须在 cshtml 中显示 result 详细信息,但出现 defined 错误。在调试模式下,我在控制器中得到了我想要的结果,但是一旦它移动到查看错误就会出现......在这种情况下需要帮助

解决方法

你有错误,因为你真的返回了 slotIds 列表。试试这个:

var data = db.User_Register_Events
.Include(i=>i.EventTable)
.ThenInclude(i=>i.Slot)
.Where(x => x.UserTable.Id == UserTableId
 || x.UserTable.Id == UserTableId2).ToList();
  

var AllSlots = db.Slots.Select(x => x.Slot_Id).ToArray();
              
 var result = data.Where(item =>!AllSlots.Contains(item.EventTable.Slot.Slot_Id))
.ToList();

 return View(result);

我只是不明白你为什么使用 var AllSlots = db.Slots.Select(x => x.Slot_Id)?您正在选择所有插槽,结果将始终为空。 试试这个:

//var data = db.User_Register_Events
//.Include(i=>i.EventTable)
//.ThenInclude(i=>i.Slot)
//.Where(x => x.UserTable.Id == UserTableId
// || x.UserTable.Id == UserTableId2).ToList();
//var AllSlots = db.Slots.Select(x => x.Slot_Id).ToArray();
              
 var data = db.User_Register_Events
.Where(x => x.UserTable.Id == UserTableId
 || x.UserTable.Id == UserTableId2).ToList();

 return View(data);