首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用Dapper ORM返回动态类型List<dynamic>

如何用Dapper ORM返回动态类型List<dynamic>
EN

Stack Overflow用户
提问于 2014-10-31 01:41:01
回答 2查看 61.3K关注 0票数 40

我使用Dapper.net已经有一段时间了,它是一个非常好的对象关系映射程序,可以很好地处理.Net动态类型。

但我注意到,当Dapper从数据库检索数据时,它会以DapperRow类型返回。

有没有什么方法可以用任何其他类型返回它,比如System.Dynamic.ExpandoObject

EN

回答 2

Stack Overflow用户

发布于 2014-10-31 01:48:48

好的!

根据dapper文档,使用query方法并获得动态:

代码语言:javascript
复制
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>,你可以用它做任何你想做的事情。

票数 58
EN

Stack Overflow用户

发布于 2016-04-16 18:42:21

我有这个问题,我用这种方法解决了!

Query()函数返回一个动态集合,其下面实际上是Dapper.SqlMapper.DapperRow对象类型。Dapper.SqlMapper.DapperRow是私有的。我需要动态地向Dapper.SqlMapper.DapperRow对象添加属性,但这似乎不起作用。因此,我希望将Dapper.SqlMapper.DapperRow转换为ExpandoObject

我能够像下面这样构建这个泛型助手方法。

代码语言:javascript
复制
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;
     }
}

然后你可以像这样使用它:

代码语言:javascript
复制
IEnumerable<ExpandoObject> result = 
           db.SqlConn.Query(sqlScript)
               .Select(x=> (ExpandoObject)ToExpandoObject(x));

参考:dapper-dot-net issues 166

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26659819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档