Принуждение списка результатов LINQ для KeyValuePair в словарь - отсутствует концепция

Я хотел написать этот оператор LINQ:

Dictionary<int, ItemBO> result = ( Dictionary<int, ItemBO> )
    ( from item in originalResults where item.Value.SomeCriteria == true
    select item );

originalResults имеет тип Dictionary .

Я понимаю, что item имеет тип KeyValuePair , но я бы подумал, что приведение списка этого типа к словарю этого типа было бы ... э ... "Естественным".

Вместо этого, чтобы заставить компилятор замолчать, мне нужно было написать this:

Dictionary<int, ItemBO> result = 
    ( from item in originalResults where item.Value.SomeCriteria == true
    select item.Value ).ToDictionary( GetItemKey );

Что, хотя и не является полностью противоречащим интуиции, предполагает, что много ненужной работы по распаковке и переупаковке Словаря происходит под прикрытием. Есть ли лучшее решение? Есть ли концепция, которую я упускаю?

6
задан Bob Kaufman 31 December 2010 в 14:18
поделиться