C# 立即执行EF

C# 立即执行EF,c#,linq,entity-framework,lambda,C#,Linq,Entity Framework,Lambda,我有这段代码,它执行通过EF EDM映射的存储过程 meTest<MCTEntities, ObjectResult<retrieveMedia_Result>>(u => u.retrieveMedia(campaign_id: 1), ConnectionResolver.MCT_DB_Connection); meTest(u=>u.retrieveMedia(活动标识:1),ConnectionResolver.MCT\u DB\u连接); 方法: pu

我有这段代码,它执行通过EF EDM映射的存储过程

meTest<MCTEntities, ObjectResult<retrieveMedia_Result>>(u => u.retrieveMedia(campaign_id: 1), ConnectionResolver.MCT_DB_Connection);
meTest(u=>u.retrieveMedia(活动标识:1),ConnectionResolver.MCT\u DB\u连接);
方法:

public static TValue meTest<U, TValue>(Func<U, TValue> func, String connection)
            where U : ObjectContext, new()
        {
            using (U entitiesContext = (U)Activator.CreateInstance(typeof(U), new[] { connection }))
            {
                return func(entitiesContext);
            }
    }
publicstatictvaluemetest(Func-Func,字符串连接)
其中U:ObjectContext,new()
{
使用(U entitiesContext=(U)Activator.CreateInstance(typeof(U),new[]{connection}))
{
返回函数(entitiesContext);
}
}
问题是retrieveMedia返回
ObjectResult
,这是通过延迟执行完成的,延迟执行会导致错误:
关闭数据读取器时调用“Read”是无效的操作。

现在,我知道我可以调用ToList()或ToArray(),但是还有其他方法可以强制立即执行吗


我不确定将
ObjectResult
强制转换为
List
是正确的做法。
ToList和ToArray都枚举了导致查询执行的集合。..anumrable完成了查询构建(即您不能再向查询添加位)但在枚举集合之前,它不会实际执行


在您的示例中,枚举集合的任何操作都将检索数据。例如,foreach.

您必须添加
ToArray()
ToList()
,以防止在处理上下文时重复结果。向<代码>列表强制转换将没有帮助:甚至不可能

如果您可以在之后对结果进行迭代,那么您将面临多次重复的风险,这将引发异常