从列值列表中创建数据表

时间:2014-04-23 21:16:25

标签: c# datatable

我正在尝试从以下列表中创建数据表

**List1**
1
2
3
4
5

**List2**
foo1
foo2
foo3
foo4
foo5

决赛桌应该如下所示(col doens的名称< t)

SomeName1   SomeName2
1           foo1
2           foo2
3           foo3
4           foo4
5           foo5

我试图避免引用两个列表的相应索引并将它们添加为行

有更好的方法吗?

编辑: 我可以有任意数量的列表而不仅仅是2

2 个答案:

答案 0 :(得分:2)

这将处理任意数量的IEnumerable。

private static void Main(string[] args)
{
    var list1 = new List<int>(new[] { 1, 2, 3, 4, 5 });
    var list2 = new List<string>(new[] { "foo1", "foo2", "foo3", "foo4", "foo5" });
    var list3 = new List<bool>(new[] {true, false, true, true, false});

    var dt = MakeDataTable(list1, list2, list3);

    Console.ReadLine();

}

private static DataTable MakeDataTable(params IEnumerable[] lists)
{
    var dt = new DataTable();
    for (var i = 0; i < lists.Length; i++)
    {
        dt.Columns.Add("column" + i);
    }
    foreach (var data in CombineList(lists))
    {
        dt.Rows.Add(data);
    }

    return dt;
}

private static IEnumerable<object[]> CombineList(params IEnumerable[] lists)
{
    var enumerators = lists.Select(l=>l.GetEnumerator()).ToArray();
    while (enumerators.All(e => e.MoveNext()))
    {
       yield return enumerators.Select(e => e.Current).ToArray();
    }
}

答案 1 :(得分:0)

你可以试试这个:

public DataTable GetTable(List list1, List list2)
{
 DataTable table = new DataTable();
 table.Columns.Add("SomeName1", typeof(int));
 table.Columns.Add("SomeName2", typeof(string));
 var collection = list1.Join(list2, x => x, y => y, (x, y) => new { X = x, Y = y });
 foreach ( var row in collection) 
   {
    table.Rows.Add(row.x, row.y);
   }
 return table;
  }
相关问题