我正在使用 Entity Framework 6。
我想运行一个返回非实体对象的存储过程(每行 3 列)
using(var dbContext = new DBContextEntity())
{
var queryProducts = dbContext.Database.SqlQuery<DataTable>("dbo.GetProductByDesc @q", query);
}
如何以 DataSet
或匿名对象的形式获取数据以便我可以迭代它?
最佳答案
据我所知,EntityFramework 不提供匿名对象具体化。原因是它可能为每种类型生成 IL 代码并缓存它(或者只是执行普通的 PropertyInfo 缓存)。
解决方案是创建一个简单的类,其属性需要与存储过程结果集的名称相匹配,并将此类用作 SqlQuery 的通用参数。
编辑:
SqlQuery 实现 IEnumerable,当您迭代它时,它会在当前线程中自动执行。要迭代结果,您可以例如:
foreach(var product in queryProducts)
{
// do something with each product here
}
您还可以将产品类实例列表传递给需要它的函数:
ShowProducts(queryProducts.ToList());
您还可以让查询在后台运行,并在完成后返回一个产品列表,有关异步获取的更多信息可以找到 here: http://www.codeguru.com/csharp/.net/net_framework/performing-asynchronous-operations-using-entity-framework.htm
关于c# - Entity Framework 从存储过程获取非实体对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27483135/