我正在尝试从以下列表中创建数据表
**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
答案 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;
}