如何使用DataContext.ExecuteQuery返回的未知类型的对象

Ed *_* S. 4 c# dynamic executequery linq-to-sql

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

在过去,我创建了一个新类型来保存此类查询的结果,或者使用此SO帖子中描述的方法.因此,既然我能够处理在.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 ) );        
}
Run Code Online (Sandbox Code Playgroud)

在运行时抛出异常,因为动态对象的属性CustomerID不存在.所以,由于我在这一点上对动态关键字的体验是零(文章/博客文章或两篇,没有真正的经验)我希望有人在这里可以告诉我,如果我想在这里做的甚至是可能的.我可能高估了ExecuteQuery背后的"魔法"数量,但我认为这可能是由于在幕后完成的属性映射.任何帮助深表感谢.

Mar*_*ell 6

最近,我们写了精致的小巧玲珑,它完美地符合原始问题:

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

它允许参数等,并且有一个(首选)类型的API Query<T>- 但dynamicAPI工作正常.