C# 将动态从简洁的查询转换为对象
是否可以将Dapper.Query返回的动态变量转换为object?例如:C# 将动态从简洁的查询转换为对象,c#,object,dynamic,dapper,C#,Object,Dynamic,Dapper,是否可以将Dapper.Query返回的动态变量转换为object?例如: 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) {
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 = ?
}
有什么简单的方法可以从记录中填充MyClass属性吗?
而不是手动操作
不。很遗憾,你必须手动操作。您可以做的最好的事情是将映射逻辑移动到一个位置,以便在数据访问层中重用它。我通常使用扩展方法,但您也可以使用反射来设置匹配的属性名称……然而,在我个人看来,我通常使用dapper来提高性能,并且使用反射有点昂贵,因此我通常避免在这些情况下使用反射
是否可以将Dapper.Query返回的动态变量转换为object
对。如上所述
我知道您可能想简化您的问题,但我想值得指出的是,如果MyClass表示select查询返回的记录,那么您发布的示例不需要返回动态对象。您可以简单地执行以下操作
var data = sql.Query<MyClass>(SELECT * FROM MyClassTable");
有什么简单的方法可以从记录中填充MyClass属性吗?
而不是手动操作
不。很遗憾,你必须手动操作。您可以做的最好的事情是将映射逻辑移动到一个位置,以便在数据访问层中重用它。我通常使用扩展方法,但您也可以使用反射来设置匹配的属性名称……然而,在我个人看来,我通常使用dapper来提高性能,并且使用反射有点昂贵,因此我通常避免在这些情况下使用反射
是否可以将Dapper.Query返回的动态变量转换为object
对。如上所述
我知道您可能想简化您的问题,但我想值得指出的是,如果MyClass表示select查询返回的记录,那么您发布的示例不需要返回动态对象。您可以简单地执行以下操作
var data = sql.Query<MyClass>(SELECT * FROM MyClassTable");
是的,但我在示例中的MyClassTable SomeId中还有其他参数要处理。我知道多重映射,但我不想在这种情况下使用它。是的,但我想处理示例中MyClassTable SomeId中的其他参数。我知道多重映射,但我不想在这种情况下使用它。