我一直在使用dapper.net了一段时间,现在和它的一个非常好的ORM映射伟大的工程与.net动态类型,但我注意到,当从数据库中检索短小精悍的数据返回为小巧玲珑行类型是有是否可以用任何其他类型返回它的方法如System.Dynamic.ExpandoObject?小巧玲珑动态返回类型
17
A
回答
15
的DapperRow
对象被设计为共享行之间的大量的状态。例如,如果您获取40行,列名称等仅存储一次。如果我们使用ExpandoObject
,则需要对每行进行配置。因此,使用DapperRow
作为幕后实施细节是一个有意识的效率。
请注意,从dynamic
API返回的对象也可以投射为IDictionary<string,object>
。
但是,我会支持其他类型,支持这种字典使用 - 其中ExpandoObject
是其中之一。所以,是的,它可以被改变这样的:
var rows = conn.Query<ExpandoObject>(...);
作品。它只需要代码支持它,并且该代码目前不存在。所以“不,但可能在未来的构建”。
还请注意,根本不需要使用DapperRow
...更多预计方案是使用通用API来实现您自己的类型。
25
当然!
按短小精悍文档中使用的查询方法,让你的dymanics:
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>
,你可以随心所欲地做任何事情。
8
我有这样的问题,我通过这种方式解决了!
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));
相关问题
- 1. 小巧玲珑MVCMiniProfiler
- 2. 小巧玲珑:FROM表名
- 3. 是在有小巧玲珑
- 4. 小巧玲珑的NullReferenceException
- 5. 如何小巧玲珑
- 6. 小巧玲珑:从GridReader
- 7. 小巧玲珑多映射
- 8. 小巧玲珑只能返回平面类吗?
- 9. 小巧玲珑的结果(小巧玲珑行)用括号标记
- 10. 小巧玲珑没有返回选择/所需的行
- 11. 小巧玲珑的表值参数OLEDB返回未知错误
- 12. 小巧玲珑输出参数没有返回值
- 13. 小巧玲珑的 - 有一个返回值
- 14. 小巧玲珑和用户定义的数据库类型
- 15. 小巧玲珑:从对象类型创建表格
- 16. 小巧玲珑多映射两个相同类型的属性
- 17. 使用小巧玲珑与SQL空间类型作为参数
- 18. 小巧玲珑与甲骨文CLOB类型
- 19. 小巧玲珑多制图PARENT_ID
- 20. 小巧玲珑的错误:一旦
- 21. QueryFirst失败使用小巧玲珑
- 22. 小巧玲珑 - 通过构造
- 23. 小巧玲珑的中间映射
- 24. 通用QueryMultiple与小巧玲珑
- 25. 小巧玲珑:读入字典从readrer
- 26. 映射表4中小巧玲珑
- 27. 小巧玲珑的多层嵌套
- 28. 使用小巧玲珑从MS SQL
- 29. 小巧玲珑multimapping和左的连接
- 30. 小巧玲珑点网“没有列名”
为什么我们要短小精悍行明确EXPANDO对象转换,它是通过以下方法正确可转换? var rows = conn.Query(...); –
2016-04-22 05:28:46
也许在下一个版本的Dapper工作正常,但在我使用的版本1.4中,这是转换后的对象没有任何属性。我从短缺问题中找到了这个解决方案。 – Behzad 2016-04-23 03:54:04