小巧玲珑:从读者阅读字典

时间:2012-12-13 18:37:59

标签: c# dapper

我的读者从存储过程中读取内容 它的第一个选择声明之一是

 select id , name from FSubsystem

十分之一的选择

我宣布了下面的字典 Dictionary SubsystemMApping = new Dictionary();

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

我需要将第一个select语句值读入字典SubsystemMApping。  id - to Key和  name - to value

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

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:8)

想象一下,你有一个归还给你的POCO。像

这样的东西
public class Item 
{
   public int Id { get; set;}
   public string Name { get; set;}
}

现在想象你有一个IEnumerable<Item>并且已经填充了这个集合(这很可能是Dapper正在返回的)

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

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,为item.Name创建值{{1}}。

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

答案 1 :(得分:8)

对于通用API,Stan已经描述过它。非通用的Read API意味着您还可以通过动态来绕过POCO:

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

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