2009-03-09 4 views
190

고유 값을 얻기 위해 LINQ를 사용하여 쿼리 할 MyClass 컬렉션이 있고 그 결과로 사전 < 문자열, 문자열>을 얻을 수 있지만 아래에서하는 것보다 더 쉽게 할 수있는 방법을 알 수 없습니다. 어떤 클리너 코드를 사용하면 사전 < 문자열, 문자열>을 내 결과로 사용할 수 있습니까?사전을 반환하는 LINQ 쿼리

var desiredResults = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); 

var queryResults = (from MyClass mc in myClassCollection 
        orderby bp.SomePropToSortOn 
        select new KeyValuePair<string, string>(mc.KeyProp, mc.ValueProp)).Distinct(); 

foreach (var item in queryResults) 
{ 
    desiredResults.Add(item.Key.ToString(), item.Value.ToString()); 
} 
+5

중복 키로 무엇을할까요? 그냥 첫 번째 걸리고 다음 일은 무시하십시오. 사전은 순서가 지정되지 않으므로 쿼리에서의 순서는 아무런 효과가 없습니다 ... –

+1

아마도 IDictionary의 SortedDictionary 구현이 필요할 것입니다. 그렇지 않으면 사전에 대한 정렬은 무의미합니다. – Fede

답변

318

ToDictionary 메서드를 직접 사용하십시오. ToLookup 및/또는 ToDictionary 확장 메서드에서

var result = 
    // as Jon Skeet pointed out, OrderBy is useless here, I just leave it 
    // show how to use OrderBy in a LINQ query 
    myClassCollection.OrderBy(mc => mc.SomePropToSortOn) 
        .ToDictionary(mc => mc.KeyProp.ToString(), 
           mc => mc.ValueProp.ToString(), 
           StringComparer.OrdinalIgnoreCase); 
+1

Mehrdad, 이것에 대한 포인터 주셔서 감사합니다. 이것이 내가 들어갈 방향 이었지만 ToDictionary의 정확한 오버로드를 간과 한 것이 틀림 없습니다. –