XML到下拉列表使用LINQ

本文关键字:LINQ 下拉列表 XML | 更新日期: 2023-09-27 17:49:39

下面的代码没有这一行也可以正常工作:"。Insert(0, new SelectListItem(){Text =", Value=", Selected = false})"…基本上,我试图添加一个空白值下拉,我得到这一行的错误是"不能从void转换为SelectListItem。"关于如何正确添加空白有什么想法吗?

@Html.DropDownListFor(model => model.itemPost.txtVal,
    new List<SelectListItem>(
        (from node in
             System.Xml.Linq.XDocument.Parse(Model.itemQuestionRowDef.SupportingXML).Descendants("option")
         select new SelectListItem
             {
                 Text = node.Value,
                 Value = node.Attribute("value").Value,
                 Selected = node.Attribute("value").Value == Model.itemPost.txtVal ? true : false
             }
         )
        ).Insert(0, new SelectListItem(){Text = "", Value="", Selected = false}),
    new { @class = "tobeFilled", id = "id_" + Model.counter, Name = "questionLst[" + Model.counter + "]." + "txtVal" })

XML到下拉列表使用LINQ

由于错误试图告诉您,List<T>.Insert()不返回任何内容,因此您不能在表达式中使用它。

相反,你可以调用LINQ的Concat()方法,它返回一个新的序列:
new[] { new SelectListItem(...) }
.Concat(from node in ...
        select ...
)

返回类型的Insertvoid。它修改你的列表。所以你需要创建和修改你的列表。然后将其传递给函数:

var list = new List<SelectListItem>(
    (from node in   System.Xml.Linq.XDocument.Parse(Model.itemQuestionRowDef.SupportingXML).Descendants("option")
     select new SelectListItem
         {
             Text = node.Value,
             Value = node.Attribute("value").Value,
             Selected = node.Attribute("value").Value == Model.itemPost.txtVal ? true : false
         }));
list.Insert(0, new SelectListItem(){Text = "", Value="", Selected = false});
@Html.DropDownListFor(model => model.itemPost.txtVal,list,new { @class = "tobeFilled", id = "id_" + Model.counter, Name = "questionLst[" + Model.counter + "]." + "txtVal" });