I have a collection of MyClass that I'd like to query using LINQ to get distinct values, and get back a Dictionary<string, string> as the result, but I can't figure out how I can do it any simpler than I'm doing below. What would some cleaner code be that I can use to get the Dictionary<string, string> as my result?

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

推荐答案

直接使用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);

.net相关问答推荐

dotnet 8 web api在部署到docker后无法工作

如何使用.NET8MapIdentityApi设置OpenApi操作ID

使用托管身份而不是检测密钥配置Application Insights

有没有更好的方法使用 Pusher Channels 的批事件发布消息?

.NET MAUI 的登录页面

如何判断属性设置器是否公开

正则表达式在空格上拆分,除非在引号中

我应该创建一个 DateRange 对象吗?

异步总是 WaitingForActivation

如何右对齐 DataGridView 列中的文本?

如何从字符串中删除所有字母字符?

如何将 NuGet 与 Visual C# Express 一起使用?

Iif 在 C# 中等效

在任务中捕获异常的最佳方法是什么?

将日期时间转换为时间跨度

从 'System.Int32' 到 'System.Nullable`1[[System.Int32, mscorlib]] 的无效转换

判断对象列表是否包含具有特定值的属性

如何比较泛型类型的值?

是否可以判断对象是否已附加到实体框架中的数据上下文?

找不到 System.Windows.Media 命名空间?