问题描述
**错误:**传入字典的模型项的类型为“System.Collections.Generic.List1[system.int32]',but this dictionary requires a model item of type 'System.Collections.Generic.ICollection
1[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);