【问题标题】:Convert dynamic to object from dapper Query<dynamic>从 dapper Query<dynamic> 将动态转换为对象
【发布时间】:2016-07-20 16:50:23
【问题描述】:

是否可以将从 Dapper.Query 返回的动态变量转换为对象?示例:

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 = ?
}

【问题讨论】:

    标签: c# object dynamic dapper


    【解决方案1】:

    从记录中填充 MyClass 属性的任何简单方法? 而不是手动输入?

    没有。不幸的是,您必须手动完成。您可以做的最好的事情是将映射逻辑移动到一个位置,以便您可以在数据访问层中重新使用它。我通常使用扩展方法,但您也可以使用反射来设置匹配的属性名称......但是,在我个人看来,我通常使用 dapper 来获得性能优势,并且使用反射有点昂贵,因此我通常避免使用在这些情况下进行反思。

    是否可以将 Dapper.Query 返回的动态变量转换为对象?

    是的。如上所述

    我知道您可能想简化您的问题,但我想值得指出的是,如果 MyClass 表示该选择查询返回的记录,您发布的示例不需要返回动态对象。您可以简单地执行以下操作...

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

    【讨论】:

    • 是的,但是我在 MyClassTable(例如 SomeId)中有其他要处理的参数。我知道 MultiMapping,但我不想在这种情况下使用它。
    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    相关资源
    最近更新 更多