c# - 如何处理从 DataContext.ExecuteQuery 返回的未知类型的对象

标签 c# linq-to-sql dynamic executequery

因此,随着 C# 4.0 中 dynamic 关键字的出现,我希望能够找到更好的解决方案来解决选择任意列时 DataContext.ExecuteQuery 返回的类型的问题。

过去,我要么创建了一个新类型来保存此类查询的结果,要么使用了描述的方法 in this SO post .因此,既然我能够处理一个在 .NET 4.0 下运行的新项目,我就考虑使用动态类型以一种不那么痛苦的方式完成同样的事情。

所以,我试了一下:

var result = _db.ExecuteQuery<dynamic>( "SELECT CustomerID,City FROM Customers", new object[0] );
foreach( var d in result )
{
    MessageBox.Show( String.Format( "{0}, {1}", d.CustomerID, d.City ) );        
}

运行时抛出异常,因为动态对象的 CustomerID 属性不存在。因此,由于到目前为止我对动态关键字的经验是零(一篇或两篇文章/博客文章,没有实际经验)我希望这里有人可以让我知道我在这里尝试做的事情是否可行。我可能高估了 ExecuteQuery 背后的“魔法”数量,但我认为这可能会起作用,因为在幕后完成了属性映射。非常感谢任何帮助。

最佳答案

最近,我们写了 dapper ,这非常符合原始问题:

var result = connection.Query( "SELECT CustomerID,City FROM Customers");
foreach( var d in result )
{
    MessageBox.Show( String.Format( "{0}, {1}", d.CustomerID, d.City ) );        
}

它允许参数等,并且通过 Query<T> 有一个(首选的)类型化 API - 但是 dynamic API 也能正常工作。

关于c# - 如何处理从 DataContext.ExecuteQuery 返回的未知类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5025702/

相关文章:

c# - 返回选定的指定列

c# - 如何使用流利断言断言集合中的所有项目?

c# - 如何在 ASP.NET MVC 区域中使用 Web 窗体的母版页

c# - 将有条件构建的 SQL where 子句转换为 LINQ

c# - 数据访问层 - LINQ-To-SQL 和泛型。我可以优化这个吗?

c# - 在 C# 中从 xml 中读入枚举

c# - 使用 C# 以单一形式动态创建多个文本框?

c# - 控制其他

c# - 使用 LINQ to SQL 导致此 InvalidOperationException 的原因是什么?

ios - 无法识别的选择器发送到实例@dynamic