Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于C列合并列表值#_C#_Winforms_Linq_List_Datatable - Fatal编程技术网

C# 基于C列合并列表值#

C# 基于C列合并列表值#,c#,winforms,linq,list,datatable,C#,Winforms,Linq,List,Datatable,我试图根据列的值将两个列表值绑定到一个列表中 下面是我得到的清单 TestCaseName Screen IEStatus IEPath FFStatus FFPath GCStatus GCPath -------------------------------------------------------------------------------------------- TC001 Yes Pass

我试图根据列的值将两个列表值绑定到一个列表中

下面是我得到的清单

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);
        }
     }
List lstcomon=new List();
List lstNew=新列表();
var checked_box=this.Controls.OfType(),其中(c=>c.checked);
foreach(复选框中的复选框cbx)
{
Program obj=新程序();
lstNew=obj.PerformTest(cbx.Text,textBox1.Text);
foreach(lstNew中的ResultProperties项)
{
1.添加(项目);
}
}

任何建议都会非常有帮助。

您应该可以使用
GroupBy
来执行此操作,如下所示:

var res = testData
    .GroupBy(test => test.TestCaseName)
    .Select(g => new ResultProperties {
        TestCaseName = g.Key
    ,   Screen = g.Select(test => test.Screen).FirstOrDefault()
    ,   IEStatus = g.Select(test => test.IEStatus).FirstOrDefault()
    ,   IEPath = g.Select(test => test.IEPath).FirstOrDefault()
    ,   FFStatus = g.Select(test => test.FFStatus).FirstOrDefault()
    ,   FFPath = g.Select(test => test.FFPath).FirstOrDefault()
    ,   GCStatus = g.Select(test => test.GCStatus).FirstOrDefault()
    ,   GCPath = g.Select(test => test.GCPath).FirstOrDefault()
    }).ToList();

其思想是基于测试的名称形成组,然后为组中的每个属性获取第一个非空条目。

与其在单个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) ;

}
List a=LoadSourceList();
IEnumerable x.TestCaseName,StringComparer.OrdinalIgnoreCase)
;
列表合并=新列表();
foreach(将组分组到组中)
{
ResultProperties项=null;
foreach(组中的ResultProperty rp)
{
项目=项目??rp;
项目屏幕=项目屏幕??反向屏幕;
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
应该为每个不同的测试用例名称包含一个
ResultProperties
,所有值在第一个wins策略上合并(属性的第一个非空值定义了组的属性)