數據表具有以下的列名:轉換數據表的給詞典<字符串,StringBuilder的>
Name, Value, Type, Info
需要轉換的結構字典
其中name是密鑰(字符串)和其他值將被追加到像StringBuilder那樣的「Value,Type,Info」,然而它有可能具有重複的Name列值,那麼對StringBuilder連續的每個附加值將使用分隔符如?:來描述下一組值。
對於例如:如果數據表的數據是這樣的:
Name, Value, Type, Info
one 1 a aa
one 11 b bb
two 2 c cc
two 22 dd ddd
two 222 ee eee
現在的結果結構應該是這樣的:
Dictionary<String,StringBuilder> detail = new Dictionary<String,StringBuilder>
{
{[one],[1,a,aa?:11,b,bb},
{[two],[2,c,cc?:22,dd,ddd?:222,ee,eee}
}
這是很容易使用循環來達到相同的,但我是嘗試通過LINQ到做到這一點,所以我想是這樣:
datatable.AsEnumerable.Select(row =>
{
KeyValuePair<String,StringBuilder> kv = new KeyValuePair<String,StringBuilder>();
kv.key = row[Name];
kv.Value = row[Value]+","+row[Type]+","+row[Info]
return kv;
}).ToDictionary(y=>y.Key,y=>y.Value)
此代碼不照顧repet的itive鍵和附加,可能我需要使用SelectMany來扁平化結構,但是如何在向我提供上面指定的需求的字典時起作用,以便可以將分隔符添加爲現有密鑰的值。任何可以指引我正確方向的指針。
爲什麼'StringBuilder'爲'Value'? – VMAtm 2015-03-19 12:24:03
這是爲了方便附加字符串而不是使用類似String.Join的東西。這將是有效的 – 2015-03-19 12:29:22
@MrinalKamboj您是否打算在創建字典後添加任何內容?如果不是,那麼'StringBuilder'可能不是非常有用的結果類型。另外,不要假設'string.Join'比沒有Bench Benchmark的'StringBuilder'效率低。對於你所知道的'string.Join'使用'StringBuilder'或者更好的東西。 – juharr 2015-03-19 12:51:46