Truy vấn LINQ để trả về một từ điển <chuỗi, chuỗi>


218

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

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());
}

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

1
Có lẽ những gì bạn đang tìm kiếm là việc triển khai Sắp xếp từ điển của IDadata. Mặt khác, việc sắp xếp từ điển là vô nghĩa.
Fede

Câu trả lời:


366

Sử dụng ToDictionaryphương pháp 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 đang đi, nhưng chắc chắn đã nhìn ra sự quá tải chính xác của ToDipedia.
Scott Ivey

18

Nhìn vào ToLookupvà / hoặc ToDictionarycác phương pháp mở rộng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.