组合列表值基于列 C#

标签: Linq DataTable C#
发布时间: 2017/2/28 22:46:53
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图将两个列表值绑定到单个列表基于列的值。

下面是列表中得到它。

TestCaseName Screen   IEStatus     IEPath      FFStatus   FFPath       GCStatus      GCPath
--------------------------------------------------------------------------------------------
TC001        Yes        Pass       C:\\a.jpg     null         null        null         null
TC002        Yes        Pass       C:\\b.jpg     null         null        null         null
TC001        Yes        null         null        Pass     C:\\c.jpg       null         null
TC002        Yes        null         null        Pass     C:\\d.jpg       null         null

但是我想要组合的值并显示如下图所示

TestCaseName Screen   IEStatus     IEPath      FFStatus   FFPath       GCStatus      GCPath
--------------------------------------------------------------------------------------------
TC001        Yes        Pass       C:\\a.jpg     Pass     C:\\c.jpg        null       null
TC002        Yes        Pass       C:\\b.jpg     Pass     C:\\d.jpg        null       null

下面是我的代码

     List<ResultProperties> lstCommon = new List<ResultProperties>();
     List<ResultProperties> lstNew= new List<ResultProperties>();
     var checked_boxes = this.Controls.OfType<CheckBox>().Where(c => c.Checked);
     foreach (CheckBox cbx in checked_boxes)
     {
        Program obj = new Program();             
        lstNew =  obj.PerformTest(cbx.Text, textBox1.Text);                           
        foreach (ResultProperties item in lstNew)
        {
           lstCommon.Add(item);
        }
     }

任何建议将大有用武之地。

解决方法 1:

而不是单个的 Linq 表达式做这件事,我可能会做的东西列出这一点,以避免过度的源数据的多个迭代︰

List<ResultProperties> a = LoadSourceList() ;

IEnumerable<IGrouping<string,ResultProperties> groups =
  a
  .GroupBy( x => x.TestCaseName , StringComparer.OrdinalIgnoreCase )
  ;

List<ResultProperties> coalesced = new List<ResultProperties>() ;

foreach( IGrouping<string,ResultProperties> group in groups )
{
  ResultProperties item = null ;

  foreach( ResultProperty rp in group )
  {
    item          = item          ?? rp          ;
    item.Screen   = item.Screen   ?? rp.Screen   ;
    item.IEStatus = item.IEStatus ?? rp.IEStatus ;
    item.IEPath   = item.IEPath   ?? rp.IEPath   ;
    item.FFStatus = item.FFStatus ?? rp.FFStatus ;
    item.FFPath   = item.FFPath   ?? rp.FFPath   ;
    item.GCStatus = item.GCStatus ?? rp.GCStatus ;
    item.GCPath   = item.GCPath   ?? rp.GCPath   ;
  }

  coalesced.Add(item) ;

}

在年底的一天,在源列表中是不变和 coalesced 应该包含一个 ResultProperties 为每个不同的测试用例名称,所有的值合并 (属性的第一个非 null 值定义的属性组) 第一次赢战略。

赞助商