2011-01-20 49 views

回答

2

您需要遍历所有的行和手动添加所需的列。

var dt = new DataTable(); 
dt.Columns.Add("Id", typeof(int)); 
dt.Columns.Add("Name", typeof(string)); 
dt.Rows.Add(1, "Hello"); 
dt.Rows.Add(2, "World"); 
dt.Rows.Add(1, "Foo"); // dupe key 

var nvc = new NameValueCollection(); 
foreach (DataRow row in dt.Rows) 
{ 
    string key = row[0].ToString(); 
    // tidy up key here 
    nvc.Add(key, row[1].ToString()); 
} 

// display nvc 
foreach (var key in nvc.AllKeys) 
    Console.WriteLine("{0}: {1}", key, nvc[key]); 

如果你有兴趣在Dictionary你可以使用ToDictionary,但是这不会,如果重复键被允许工作。在这种情况下,另一个优雅的解决方案是使用ToLookup

// optionally use a Func to do the tidying up 
// or call an existing method or do it inline for simple operations 
Func<string, string> tidyFunc = (s) => s.Trim(); 
var lookup = dt.Rows.Cast<DataRow>() 
       .ToLookup(r => tidyFunc(r[0].ToString()), r => r[1].ToString()); 

foreach (var g in lookup) 
{ 
    Console.WriteLine("Key: " + g.Key); 
    foreach (var item in g) 
     Console.WriteLine(item); 
} 
+0

嗨,谢谢你的回答。你能指导我做些什么吗?我不熟悉LINQ ToLookup(r => tidyFunc(r [0] .ToString()),r => r [1] .ToString()) – 2011-01-21 02:40:04

相关问题