我使用Dapper.net已经有一段时间了,它是一个非常好的对象关系映射程序,可以很好地处理.Net动态类型。
但我注意到,当Dapper从数据库检索数据时,它会以DapperRow
类型返回。
有没有什么方法可以用任何其他类型返回它,比如System.Dynamic.ExpandoObject
发布于 2014-10-31 01:48:48
好的!
根据dapper文档,使用query方法并获得动态:
dynamic account = conn.Query<dynamic>(@"
SELECT Name, Address, Country
FROM Account
WHERE Id = @Id", new { Id = Id }).FirstOrDefault();
Console.WriteLine(account.Name);
Console.WriteLine(account.Address);
Console.WriteLine(account.Country);
正如您所看到的,您将获得一个动态对象,并且您可以访问其属性,只要这些属性在查询语句中定义良好。
如果你省略了.FirstOrDefault()
,你会得到一个IEnumerable<dynamic>
,你可以用它做任何你想做的事情。
发布于 2016-04-16 18:42:21
我有这个问题,我用这种方法解决了!
Query()
函数返回一个动态集合,其下面实际上是Dapper.SqlMapper.DapperRow
对象类型。Dapper.SqlMapper.DapperRow
是私有的。我需要动态地向Dapper.SqlMapper.DapperRow对象添加属性,但这似乎不起作用。因此,我希望将Dapper.SqlMapper.DapperRow
转换为ExpandoObject
。
我能够像下面这样构建这个泛型助手方法。
public class DapperHelpers
{
public static dynamic ToExpandoObject(object value)
{
IDictionary<string, object> dapperRowProperties = value as IDictionary<string, object>;
IDictionary<string, object> expando = new ExpandoObject();
foreach (KeyValuePair<string, object> property in dapperRowProperties)
expando.Add(property.Key, property.Value);
return expando as ExpandoObject;
}
}
然后你可以像这样使用它:
IEnumerable<ExpandoObject> result =
db.SqlConn.Query(sqlScript)
.Select(x=> (ExpandoObject)ToExpandoObject(x));
https://stackoverflow.com/questions/26659819
复制相似问题