ExecuteStoreQuery返回多行,如何将其导入IList或List

时间:2012-01-26 07:15:42

标签: entity-framework entity-framework-4 c#-3.0

我有一个返回动态查询的存储过程,例如,如果我将一些值传递给它的id参数,它会返回一个动态查询,如

Select * from someTable tbl where tbl.Id=51

然后我使用ExecuteStoreQuery

执行此查询
string query = container.CreateQuery<string>(
                    "SELECT VALUE DB.Store.GetQuery(@ID) FROM {1}",
                    new System.Data.Objects.ObjectParameter("ID", 51)
                ).First();

object lists = container.ExecuteStoreQuery<object>(query);

问题是container.ExecuteStoreQuery<object>(query);返回多行,我想进入列表,我该怎么做

3 个答案:

答案 0 :(得分:7)

创建一个想要返回结果类型的模型,如

public class mymodel{

public int _key{get;set;}
public string _value{get;set;}
}

其中_key_value对应于返回结果的列

执行查询ExecuteStoreQuery也会返回结果AsQueryable

 container.ExecuteStoreQuery<mymodel>(query).AsQueryable().ToList();

答案 1 :(得分:4)

我不确定我是否理解您的问题,但看起来您正在寻找ToList方法:

List<MyEntity> list = container.ExecuteStoreQuery<MyEntity>(query).ToList();

代码中存在较大的问题object - 如果你的意思是object,那么它将无效。您必须提供实际类型(映射实体,复杂类型或自定义类,其公共属性使用与结果集中的列相同的名称),否则EF将不会为您填充数据。

答案 2 :(得分:1)

可以在您的实体模型中导入存储过程。这将导致您可以通过代码调用ObjectContext上的功能。

映射SP时,您可以让EF将SP的结果映射到实体。如果您没有匹配的实体,EF可以确定存储过程的结果列并映射复杂类型。

Here is the MSDN documentation解释了这一点。