所有你缺少的是KeyValuePair的使用類型。你可以使用Jared的lambda表達式的版本,或者如果你喜歡的查詢表達式語法:
var toReturn = from kv in source
select new KeyValuePair<MyType, OtherType>(kv.Key,
kv.Value.First());
如果你不想顯式地指定類型參數,你可以創建你自己的助手和使用類型推斷:
// Non-generic helper class.
public static class KeyValuePair
{
public static KeyValuePair<TKey, TValue> Of(TKey key, TValue value)
{
return new KeyValuePair<TKey, TValue>(key, value);
}
}
此時您的查詢就會變成:
var toReturn = from kv in source
select KeyValuePair.Of(kv.Key, kv.Value.First());
或
var toReturn = source.Select(kv => KeyValuePair.Of(kv.Key, kv.Value.First());
編輯:哎呀 - 我想我也會誤讀你的問題。如果你希望它是完全相同的類型,即取值爲枚舉過的,只是使用Take(1)
代替First()
:
var toReturn = source.Select(kv => KeyValuePair.Of(kv.Key, kv.Value.Take(1));
(是不是類型推斷可愛:)
感謝一大堆,我需要的第一個版本。我實際上嘗試過,但忘了在KeyValuePair中指定類型,並且出現錯誤。 – epitka 2009-06-26 14:43:15