【问题标题】:Insert Anonymous object in a list of same anonymous type在相同匿名类型的列表中插入匿名对象
【发布时间】:2014-02-14 14:22:59
【问题描述】:

我正在使用 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";

我会感谢任何建议。

基肖尔

【问题讨论】:

  • “不工作”并没有告诉我们您所看到的任何信息。你有编译时错误吗?执行时间错误?只是没有显示新项目吗? (我已经用通灵调试加了一个答案,不过请下次写个更详细的问题……)
  • 对不起乔恩,不工作我的意思是说没有提供所需的输出。没有编译或运行时错误。
  • 对。在这种情况下,请参阅我的答案。

标签: linq anonymous-types


【解决方案1】:

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

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

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

cmbPaymentMethods.DataSource = itemsList;

【讨论】:

  • @kishorebarik 如果有效,您可能想接受这个答案。
【解决方案2】:

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

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

var list =  items.ToList();

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

cmbPaymentMethods.DataSource = list;

【讨论】:

  • Uppss...抱歉,看起来有人比我写答案的速度更快!
  • 但是,玉梅,你的伎俩是万无一失的。我刚刚创建了另一个 var 类型变量作为您的建议,然后添加了空项。这奏效了。谢谢。
【解决方案3】:

如何使用 XNamespace ns = xDocItems.Root.Name.Namespace; 变量项目 = 从我进入 xDocItems.Descendants(ns + "insync_navpaymentmethods") 选择新的 { code = (string)i.Element(ns + "Code"),

【讨论】:

  • 对不起user3359294,我听不懂你的意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多