0

嗨,我有两个列表,一个是父列表,另一个是子列表,我需要将两个列表中包含的数据加载到单个 Datatable 是否有办法做到这一点

public class Country
{
  string Name;
  string Countrycode
  list<Company> Companies=new list<Company>(); 
}

public class Company
{
  string ComapnyName;
  string Address1;
  string Address2;
  String Owner; 
} 

创建表时必须是这样的

Name       Countrycode  ComapnyName   Address1    Address2   Owner              
USA          001          Apple       Whereever   null       Jobbs  
Japan        002          Sony        Whereever   null       unknown
4

2 回答 2

1

您可能想使用 microsoft 的示例来说明如何创建复制到数据的方法,请在此处显示MSDN

然后,您可以执行以下操作

Country.SelectMany(x => x.Companies
                         .Select(y => new { 
                                            x.Name,
                                            x.CountryCode,
                                            y.ComapnyName,
                                            y.Address1,
                                            y.Address2,
                                            y.Owner
                                          } )).CopyToDataTable();

PS复制了公司名称的拼写不知道你是不是这个意思!

处理公司为空的更新

如果公司属性可以为空:

Country.SelectMany(x => (x.Companies ?? Enumerable.Empty<Company>())
                         .Select(y => new { 
                                            x.Name,
                                            x.CountryCode,
                                            y.ComapnyName,
                                            y.Address1,
                                            y.Address2,
                                            y.Owner
                                          } )).CopyToDataTable();
于 2013-09-30T12:36:53.977 回答
1

有什么问题?您可以使用循环:

DataTable tblCountries = new DataTable();
// add all columns ...
foreach(Country c in allCountries)
{
    if(c.Companies.Any())
    {
        foreach(var company in c.Companies)
        {
            var row = tblCountries.Rows.Add();
            row.SetField("Name", c.Name);
            row.SetField("Countrycode", c.Countrycode);
            row.SetField("CompanyName", company.CompanyName);
            // add the other company fields ...
        }
    }
    else  // add just the country and let the company cells be null
    {
        var row = tblCountries.Rows.Add();
        row.SetField("Name", c.Name);
        row.SetField("Countrycode", c.Countrycode);
    }
}
于 2013-09-30T12:34:24.430 回答