我已经使用"SELECT"关键字和扩展方法通过LINQ返回了IEnumerable<T>,但是我需要返回一个泛型Dictionary<T1, T2>,并且无法计算出来.我了解到这一点的示例使用了类似于以下形式的内容:

IEnumerable<T> coll = from x in y 
    select new SomeClass{ prop1 = value1, prop2 = value2 };

我也对扩展方法做了同样的事情.我假设,由于Dictionary<T1, T2>中的项可以迭代为KeyValuePair<T1, T2>,所以我可以用"new KeyValuePair<T1, T2> { ..."替换上面示例中的"SomeClass",但这不起作用(Key和Value被标记为readonly,所以我无法编译此代码).

这是可能的,还是我需要分多个步骤来完成?

谢谢

推荐答案

扩展方法还提供了ToDictionary个扩展.它的使用相当简单,一般的用法是为键传递lambda Select 器,并将对象作为值,但是可以为键和值传递lambda Select 器.

class SomeObject
{
    public int ID { get; set; }
    public string Name { get; set; }
}

SomeObject[] objects = new SomeObject[]
{
    new SomeObject { ID = 1, Name = "Hello" },
    new SomeObject { ID = 2, Name = "World" }
};

Dictionary<int, string> objectDictionary = objects.ToDictionary(o => o.ID, o => o.Name);

那么objectDictionary[1]将包含值"Hello"

.net相关问答推荐

为什么我在环境变量中有不同的值?

.Net MAUI Android 无法与 API localhost 对话

如何使用 Moq 为不同的参数设置两次方法

如何在任务栏顶部全屏显示 Windows 窗体?

AutoMapper 的替代品

如何让 DateTimePicker 显示一个空字符串?

每第 N 个字符/数字拆分一个字符串/数字?

一种消耗(所有字节)BinaryReader 的优雅方式?

Silverlight 与 Flex

如何在 C# 中直接执行 SQL 查询?

如何通过 LINQ 比较没有时间的 DateTime?

带有输入字段的消息框

DBNull 的意义何在?

日期时间是什么意思?在 C# 中是什么意思?

Double.TryParse 或 Convert.ToDouble - 哪个更快更安全?

如何使用 Entity Framework Code First CTP 5 存储图像?

SqlBulkCopy 的推荐批量大小是多少?

合并两个(或更多)PDF

ADO.NET Entity Framework:更新向导不会添加表

WPF 中的 Application.DoEvents() 在哪里?