LINQ内部联接和选择项下拉列表

时间:2018-08-14 18:47:17

标签: linq razor

我想将数据库中的结果拉入选择下拉框。我想要做的是有一个选择下拉框,该下拉框显示数据库中的选定值以及列表中的其他值。 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();

1 个答案:

答案 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