Все, что вам не хватает является типом KeyValuePair использовать. Вы можете использовать выражение версию лямбды Джаред, или если вы хотите выражение запроса синтаксиса:
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());
EDIT: К сожалению, я тоже неправильно прочитал ваш вопрос. Если вы хотите, чтобы быть точно такой же тип, т.е. со значением быть перечислимы тоже просто использовать Take(1)
вместо First()
:
var toReturn = source.Select(kv => KeyValuePair.Of(kv.Key, kv.Value.Take(1));
(Не Выведение типов милые :)
Благодаря кучу, я нуждался в первой версии. Я на самом деле пробовал это, но забыл указать типы в KeyValuePair и получал ошибку. – epitka