4

我的读者从存储过程中读取内容,该存储过程的第一个选择语句之一为

 select id , name from FSubsystem

在 10 个选定的语句中

我声明了字典,如下所示 Dictionary SubsystemMApping = new Dictionary();

var reader = connection.QueryMultiple(...);

我需要将第一个 select 语句值读取到字典 SubsystemMApping 。id - 到键和名称 - 到值

我尝试使用 reader.Read.Todictionary() 但无法成功。我对 Func & Action 不是很熟悉。这就是我认为我无法正确理解 Todictionary 的 2 个重载的原因。

任何人都可以帮忙吗?

4

2 回答 2

10

对于通用 API,Stan 已经对其进行了描述。非通用读取 API 意味着您还可以通过动态绕过 POCO:

var lookup = reader.Read().ToDictionary(x => (int)x.id, x => (string)x.name);

基本上,通过“动态”,它将列重新公开为虚拟属性。

于 2012-12-13T19:44:41.147 回答
8

想象一下,您有一个返回给您的 POCO。就像是

public class Item 
{
   public int Id { get; set;}
   public string Name { get; set;}
}

现在假设您有一个IEnumerable<Item>并且集合已填充(这很可能是 Dapper 返回的内容)。

要使用该ToDictionary方法,您有 2 个重要的重载。

var dictionary = itemList.ToDictionary( item => item.Id );

这会返回一个Dictionary<int,Item>. 字典的键是每个item.Id属性。

键/值重载:

var dictionary = itemList.ToDictionary( item => item.Id , item => item.Name );

此重载Dictionary<int,string>使用指定item.Id的 for 键和item.Name值创建一个。

还有 2 个重载允许您在确定键时传递要使用的自定义比较器。

于 2012-12-13T19:07:15.250 回答