gpt4 book ai didi

.net - IQueryable<> 来自存储过程( Entity Framework )

转载 作者:行者123 更新时间:2023-12-04 04:19:39 25 4
gpt4 key购买 nike

我要获取IQueryable<>执行存储过程时的结果。

这是一段运行良好的代码:

IQueryable<SomeEntitiy> someEntities;  
var globbalyFilteredSomeEntities =
from se in m_Entities.SomeEntitiy
where
se.GlobalFilter == 1234
select se;

我可以用它来应用全局过滤器,然后在类似的东西中使用结果:
result = globbalyFilteredSomeEntities
.OrderByDescending(se => se.CreationDate)
.Skip(500)
.Take(10);

我想要做什么 - 在全局过滤器中使用一些存储过程。
我试过:

将存储过程添加到 m_Entities ,但它返回 IEnumerable<>并立即执行 sp:
var globbalyFilteredSomeEntities = 
from se in m_Entities.SomeEntitiyStoredProcedure(1234);

使用 EFExtensions 库实现查询,但它是 IEnumerable<> .
如果我使用 AsQueryable()OrderBy() , Skip() , Take()之后 ToList()执行该查询 -
我得到异常(exception) DataReader已打开,我需要先关闭它(无法粘贴错误 - 它是俄语)。
var globbalyFilteredSomeEntities = 
m_Entities.CreateStoreCommand("exec SomeEntitiyStoredProcedure(1234)")
.Materialize<SomeEntitiy>();
//.AsQueryable()
//.OrderByDescending(se => se.CreationDate)
//.Skip(500)
//.Take(10)
//.ToList();

也只是跳过 .AsQueryable()没有帮助 - 同样的异常(exception)。
当我放 ToList()查询执行,
但是在没有 Skip() 的情况下执行查询太昂贵了, Take() .

最佳答案

您不能做您想做的事情,原因与不能将存储过程放在 SELECT 查询的 FROM 子句中的原因相同——SQL 的构建不是为了支持这种操作。

你能把你想要的逻辑放在一个 View 而不是一个存储过程中吗?

关于.net - IQueryable<> 来自存储过程( Entity Framework ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2772295/

25 4 0