我想将数据库中的结果拉入选择下拉框。我想要做的是有一个选择下拉框,该下拉框显示数据库中的选定值以及列表中的其他值。 CommDept表中的CommDeptID和DeptText字段具有值,例如1 HR,2 Administration,3 IT等。LocationID等于CommDeptID。
我收到此错误:
无法将类型'System.Linq.IQueryable <>'隐式转换为'IntranetSite.Models.Communications'。存在显式转换(您是否缺少演员表?)
通信是我的模型,如下所示:
[Key]
public int CommunicationsID { get; set; }
[Required(ErrorMessage = "Enter Title")]
public string Title { get; set; }
[Required(ErrorMessage = "Select Location")]
public int LocationID { get; set; }
[Required(ErrorMessage = "Select Message Type")]
public int MessageTypeID { get; set; }
[Required(ErrorMessage = "Enter Message")]
public string Message { get; set; }
public DateTime EnteredDateTime { get; set; }
LocationID是我的通讯表中的一个字段,也是我的CommDept表中的一个字段。
[Key]
public int CommDeptID { get; set; }
public string DeptText { get; set; }
我的代码:
var data = from c in _Context.Communications
join d in _Context.CommDept on c.LocationID equals d.CommDeptID
where c.CommunicationsID == id
select new
{
c.CommunicationsID,
c.Title,
c.MessageTypeID,
c.Message,
c.LocationID,
d.DeptText
};
Communications = data;
LocationID = _Context.CommDept
.Select(a => new SelectListItem
{
Value = a.CommDeptID.ToString(),
Text = a.DeptText,
Selected = a.CommDeptID == c.LocationID
})
.ToList();
答案 0 :(得分:1)
您选择的新语句正在创建新的匿名类型。然后,您尝试将其隐式转换为Communications模型。与其只是说“选择新的”,不如尝试选择特定类型的新实例而不是匿名类型。
另一个问题是您没有使用Linq语句返回的数据。然后,您尝试在新语句中使用顶部linq查询中的别名c。我会把它们组合成一个陈述。
假设LocationID是一个SelectList,请尝试以下操作:
var myList = new SelectList(new List<SelectListItem>{
from c in _Context.Communications
join d in _Context.CommDept
on c.LocationID equals d.CommDeptID
where c.CommunicationsID == id
select new SelectListItem
{
Value = d.CommDeptID.ToString(),
Text = d.DeptText,
Selected = d.CommDeptID == c.LocationID
}
}.ToList());
我自己没有运行此代码,因此请仔细检查代码。您也可以在此处查看更多信息:How to generate dropdownlist in asp.net MVC razor