我的读者从存储过程中读取内容 它的第一个选择声明之一是
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次重载的原因。
有人可以帮忙吗?
答案 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);
基本上,通过“动态”,它会将列重新公开为虚拟属性。