Alles, was Sie fehlt, ist die Art von KeyValuePair zu verwenden. Sie könnten Jareds Lambda-Ausdruck-Version verwenden, oder wenn Sie die Abfrage Ausdruck Syntax mag:
var toReturn = from kv in source
select new KeyValuePair<MyType, OtherType>(kv.Key,
kv.Value.First());
Wenn Sie nicht wollen, explizit die Typargumente angeben, können Sie Ihre eigene Helfer Klasse und Verwendung Typinferenz schaffen könnte:
// 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);
}
}
, bei der Abfrage zeigen wird:
var toReturn = from kv in source
select KeyValuePair.Of(kv.Key, kv.Value.First());
oder
var toReturn = source.Select(kv => KeyValuePair.Of(kv.Key, kv.Value.First());
EDIT: Ups - ich denke, ich würde Ihre Frage auch falsch lesen. Wenn Sie es möchten, von der exakt gleichen Art sein, dh mit dem Wert zu enumerable sein, verwenden Sie einfach Take(1)
statt First()
:
var toReturn = source.Select(kv => KeyValuePair.Of(kv.Key, kv.Value.Take(1));
(Ist geben nicht schön Inferenz :)
Dank Haufen, brauchte ich erste Version. Ich habe das tatsächlich ausprobiert, aber vergessen, die Typen in KeyValuePair anzugeben und bekam einen Fehler. – epitka