2013-02-07 40 views
2

我正在试图制作一个通用的报表系统,以便我可以随时将报表添加到我的程序中,而不是每次必须添加时发布该程序的新版本一份报告。
目前,我有它的一部分工作;
我的自定义报告SQL与报告名称一起存储在表中。报告名称用于按钮供用户点击,当他们点击按钮时,我希望SQL执行并绑定到一个gridview,所以它尽可能通用。实体框架返回泛型类型的自定义SQL查询

这似乎是麻烦来临的地方。获取SQL并执行它是好的,但将它绑定到一个gridview似乎是不可能的,我只会得到一个名为Column的列,它显示一行值为System.Object的行。

我认为这个问题是因为我要回的多个表中的数据,

SELECT c.CertificateName, e.EntityName, 
     ce.CertificateDate, ce.CertificateExpiry, ce.CertificateNumber 
FROM FCERTSTest.dbo.CertificateEntries ce 
INNER JOIN FCERTSTest.dbo.Certificates c 
ON c.CertificateID = ce.Certificate_ID 
INNER JOIN FCERTSTest.dbo.Entities e 
ON e.EntityID = ce.Entity_ID 
WHERE FirstNotificationSent = '1' 

我目前使用

using (DBContainer db = new DBContainer()) 
{ 
    grid.DataSource = db.Database.SqlQuery<dynamic>(SQLCommand).ToList(); 
} 

我试着object并得到更换dynamic即同样的问题... 我明白,最好的解决方案是有一个自定义类,并用该自定义类替换dynamic,但然后我失去了它是通用的好处,因为不同的报告可能不会返回相同的结果,我会需要一个新的自定义类...

回答

5

使用SqlDataAdapterDataSet。 EF不适用于对结果集没有特殊类型的“动态查询”。

+0

啊,谢谢。我认为可能是这样。我最终使用'SqlDataAdapter'作为临时修复。我现在必须让它更持久。 EF文档中是否有解释/涵盖缺少对动态查询支持的地方? – Trent

+0

[documentation](http://msdn.microsoft.com/zh-cn/library/gg696545%28v=vs.103%29.aspx)仅讨论有与结果集中的列匹配的属性的类型。 –