在同一匿名类型的列表中插入匿名对象

时间:2014-02-14 14:22:59

标签: linq anonymous-types

我正在使用LINQ创建一个匿名类型列表,然后将其与ComboBox绑定。但我想在该列表中添加一个空项目,但它不起作用。

    XNamespace ns = xDocItems.Root.Name.Namespace;
    var items =
    from i in
    xDocItems.Descendants(ns + "insync_navpaymentmethods")
    select new
    {
        code = (string)i.Element(ns + "Code"),
    };

这里我使用LINQ从XElement创建匿名类型列表。

    items.ToList().Insert(0, new { code = string.Empty });

    //items.ToList().Add(new { code = string.Empty }); //Not working

在此列表中添加空白项目。因此,用户可以在组合框中选择空白项目。

    cmbPaymentMethods.DataSource = items.ToList();
    cmbPaymentMethods.DisplayMember = "code";
    cmbPaymentMethods.ValueMember = "code";

我会感谢任何建议。

基肖尔马布

3 个答案:

答案 0 :(得分:4)

我强烈怀疑这个版本,但没有显示额外的项目。那是因为您将新项目添加到您丢弃的“临时”列表中,然后您正在为数据源构建列表。

您只想调用ToList()一次,并将该列表用于插入和数据源:

var itemsList = items.ToList();
itemsList.Insert(0, new { code = string.Empty }); // Or use Add for the end...

cmbPaymentMethods.DataSource = itemsList;

答案 1 :(得分:2)

items.ToList()将返回该对象的新实例,因此该项目将被添加到新列表中,而不是您想要的列表。

每次有“items.ToList()”时,都会创建一个新实例。你需要:

var list =  items.ToList();

list.Add(new { code = string.Empty });

cmbPaymentMethods.DataSource = list;

答案 2 :(得分:0)

如何使用XNamespace ns = xDocItems.Root.Name.Namespace;     var items =     来自我     xDocItems.Descendants(ns +“insync_navpaymentmethods”)     选择新的     {         code =(string)i.Element(ns +“Code”),