简体   繁体   English

从dapper查询将动态转换为对象<dynamic>

[英]Convert dynamic to object from dapper Query<dynamic>

Is it possible to convert dynamic variable returned from Dapper.Query to object? 是否可以将Dapper.Query返回的动态变量转换为对象? Example: 例:

class MyClass 
{
    public int Id { get; set;}
    public string SomeData { get; set; }
}

IEnumerable<dynamic> data = sql.Query<dynamic>(SELECT * FROM MyClassTable");
foreach(var record in data)
{
    int parent_id = record.SomeId;
    // any simple way to fill MyClass properites from record?
    // instead of doing in manually?
    MyClass obj = ?
}

any simple way to fill MyClass properites from record? 有什么简单的方法可以从记录中填充MyClass属性? instead of doing in manually? 而不是手动进行?

No. Unfortunately you'll have to do it manually. 不会。不幸的是,您必须手动进行操作。 The best thing you can do is move the mapping logic to one place so you can re-use it in your data access layer. 最好的办法是将映射逻辑移到一个位置,以便可以在数据访问层中重新使用它。 I usually use extension methods, but you can also use reflection to set matching property names...however, in my personal opinion, I usually use dapper for its performance benefits and using reflection is a bit expensive, for that reason I usually avoid using reflection in these cases. 我通常使用扩展方法,但是您也可以使用反射来设置匹配的属性名称...但是,以我个人的观点,我通常使用dapper来提高性能,而使用反射有点贵,因此我通常避免使用在这些情况下的反思。

Is it possible to convert dynamic variable returned from Dapper.Query to object? 是否可以将Dapper.Query返回的动态变量转换为对象?

Yes. 是。 As explained above 如上所述

I know you probably wanted to simplify your question but I guess it's worth pointing out that the example that you posted doesn't need to return a dynamic object if MyClass represents the records returned by that select query. 我知道您可能想简化您的问题,但我想值得指出的是,如果MyClass表示该选择查询返回的记录,则您发布的示例不需要返回动态对象。 You could simply do the following... 您可以简单地执行以下操作...

var data = sql.Query<MyClass>(SELECT * FROM MyClassTable");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM