2009-03-09 35 views
190

Tôi có một bộ sưu tập MyClass mà tôi muốn truy vấn bằng LINQ để nhận các giá trị khác biệt và lấy lại từ điển < chuỗi, chuỗi> là kết quả, nhưng tôi không thể hiểu làm thế nào tôi có thể làm điều đó bất kỳ đơn giản hơn tôi đang làm dưới đây. Điều gì sẽ một số mã sạch hơn mà tôi có thể sử dụng để có được chuỗi < từ điển, là kết quả của tôi?LINQ truy vấn để trả về một từ điển <string, string>

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

Bạn muốn nó làm gì với các khóa trùng lặp? Chỉ cần lấy cái đầu tiên và bỏ qua những cái tiếp theo? Hãy lưu ý rằng từ điển không được đặt hàng, do đó, thứ tự của bạn trong truy vấn sẽ không có hiệu lực ... –

+1

Có lẽ những gì bạn đang tìm kiếm là việc thực hiện SortedDictionary của IDictionary. Nếu không, việc phân loại trên một Từ điển là vô nghĩa. – Fede

Trả lời

318

Sử dụng phương thức ToDictionary trực tiếp.

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, cảm ơn con trỏ về điều này. Đây là hướng tôi đã đi vào, nhưng vì phải xem xét quá tải chính xác của ToDictionary. –

15

Nhìn vào ToLookup và/hoặc ToDictionary phương pháp khuyến nông.

Các vấn đề liên quan