如何将foreach循环的输出合并为一个?

时间:2019-04-09 06:42:36

标签: c# .net wpf foreach binding

代码类似于主体,而 IdSub 类似于主体的子项。 1个主要项目可能有几个子项目。

我的代码后面有这个foreach代码。

 foreach (var subID in Ids)
     {
          Display display = new Display();

           display.Code = item.Code;
           display.Name = item.Name;
           display.Price = item.Price;
           display.IdSub = subID ;
           DisplayList.Add(display);
    }

由于 ID 具有3个 subID ,因此输出具有3行数据。我想要的是因为代码名称价格与主要项目相同。我希望它与几个 IdSub 合并为1行。如何合并/合并这些数据?

2 个答案:

答案 0 :(得分:0)

然后,您需要将IdSub类上的Display字段/属性更改为整数数组:int[](可以做不同的操作,但这是IMO的最佳方法)。

然后您可以省略循环:

Display display = new Display()
{
  Code = item.Code,
  Name = item.Name,
  Price = item.Price,
  IdSub = Ids //if Ids is array of ints, else you need to use ToArray() method
}

DisplayList.Add(display);

要显示具有绑定的IdSub数据,您需要在Display类上定义其他属性:

public string IdSubDisplay
{
  get
  {
    return string.Join(",", IdSub);
  }
  set { }
}

并绑定到IdSubDisplay

答案 1 :(得分:0)

您可以选择几种方法。这是最简单的之一:

foreach (var id in itemIds)
{
    if (DisplayList.Any(x=> x.Code == item.Code && x.Name == item.Name && x.Price == item.Price))
    {
        var display = DisplayList.Single(x=> x.Code == item.Code && x.Name == item.Name && x.Price == item.Price);
        display.IdSubs.Add(id);//change IdSub to IdSub, as a list of its previous type
    }
    else
    {
        Display display = new Display();
        display.Code = item.Code;
        display.Name = item.Name;
        display.Price = item.Price;
        display.IdSubs = new List<int>();//Assumed that IdSub was int
        DisplayList.Add(display);
    }
}