从 dapper Query<dynamic> 将动态转换为对象
Convert dynamic to object from dapper Query<dynamic>
是否可以将 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 = ?
}
any simple way to fill MyClass properites from record?
instead of doing in manually?
没有。不幸的是,您必须手动完成。您能做的最好的事情就是将映射逻辑移到一个地方,这样您就可以在数据访问层中重复使用它。我通常使用扩展方法,但你也可以使用反射来设置匹配的 属性 名称......但是,在我个人看来,我通常使用 dapper 是为了它的性能优势,并且使用反射有点昂贵,因此我通常避免在这些情况下使用反射。
Is it possible to convert dynamic variable returned from Dapper.Query to object?
是的。如上所述
我知道您可能想简化您的问题,但我想值得指出的是,如果 MyClass
代表记录 [,您发布的示例不需要 return 动态对象 return 由 select 查询编辑。您可以简单地执行以下操作...
var data = sql.Query<MyClass>(SELECT * FROM MyClassTable");
是否可以将 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 = ?
}
any simple way to fill MyClass properites from record? instead of doing in manually?
没有。不幸的是,您必须手动完成。您能做的最好的事情就是将映射逻辑移到一个地方,这样您就可以在数据访问层中重复使用它。我通常使用扩展方法,但你也可以使用反射来设置匹配的 属性 名称......但是,在我个人看来,我通常使用 dapper 是为了它的性能优势,并且使用反射有点昂贵,因此我通常避免在这些情况下使用反射。
Is it possible to convert dynamic variable returned from Dapper.Query to object?
是的。如上所述
我知道您可能想简化您的问题,但我想值得指出的是,如果 MyClass
代表记录 [,您发布的示例不需要 return 动态对象 return 由 select 查询编辑。您可以简单地执行以下操作...
var data = sql.Query<MyClass>(SELECT * FROM MyClassTable");