我目前正在使用 EF 和 MVC 构建自定义报告生成器。我的查询生成器构建 SQL,然后我可以使用 dbSet.SqlQuery() 对数据库运行此查询。
但是,用户将能够选择他们希望返回的字段,可能来自不同的表。
因此,我不确定将结果返回为哪种“类型”。如果只选择“客户”表中的字段,我可以轻松返回“客户”列表。
我希望这是有道理的。任何人都可以在这里给我任何指示吗?
我目前正在使用 EF 和 MVC 构建自定义报告生成器。我的查询生成器构建 SQL,然后我可以使用 dbSet.SqlQuery() 对数据库运行此查询。
但是,用户将能够选择他们希望返回的字段,可能来自不同的表。
因此,我不确定将结果返回为哪种“类型”。如果只选择“客户”表中的字段,我可以轻松返回“客户”列表。
我希望这是有道理的。任何人都可以在这里给我任何指示吗?
嗯...不确定您是否会找到完美的解决方案。问题是您需要在运行时定义列。最初我在想你可以尝试使用匿名类型,但你不能在方法签名中使用匿名类型。 这是Dennis 建议的关于动态对象的文章,但是将其与您的想法联系在一起是我的头。长话短说,我认为没有一个简单的答案。
这是通过查看此 MSDN Artical创建的示例,了解如何针对您的 DBContext 执行通用查询。您可能可以使用它,但您将无法保留您的数据类型(也许这对您的报告无关紧要?):
using (var context = new BloggingContext())
{
//Here blogNames will be a List<string[]>
var blogNames = context.Database.SqlQuery<string[]>(
"SELECT Name, YourProperty FROM dbo.Blogs").ToList();
}