在实体框架中的存储过程中使用 IQueryable

本文关键字:过程中 IQueryable 存储过程 存储 实体 框架 | 更新日期: 2023-09-27 18:30:41

我正在尝试在存储过程中使用IQueryable,编写存储过程的原因是检查查询中的多个条件。如果我走错了方向,请纠正我。

我认为应用IQueryable将比IEnumerable快得多,不要忘记我能够在其他实体上使用IQueryable而不会出现任何问题。

控制器:

public ActionResult CrmBlogGroupType(int? page, bool? Name, bool? AuthorTitle, bool? Description, string search, int? PageSize, string type)
{
    try
    {
        if (type==null)
        {
            type = "A";
        }
        IQueryable<Usp_getBlogSetPosts_Result> _objBlogSet = _dataLayer.GetBlogSet(type);
        var Result = _objBlogSet.ToPagedList(page ?? 1, PageSize ?? 10);
        return View(_objBlogSet);
}

数据层:

public IQueryable<Usp_getBlogSetPosts_Result> GetBlogSet(string type)
{
        IQueryable<Usp_getBlogSetPosts_Result> Obj = _dbContext.Usp_getBlogSetPosts(type).AsQueryable();
         return Obj;
}

Context.cs

 public virtual ObjectResult<Usp_getBlogSetPosts_Result> Usp_getBlogSetPosts(string blogSetType)
 {
        var blogSetTypeParameter = blogSetType != null ?
            new ObjectParameter("BlogSetType", blogSetType) :
            new ObjectParameter("BlogSetType", typeof(string));
        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Usp_getBlogSetPosts_Result>("Usp_getBlogSetPosts", blogSetTypeParameter);
}

错误:

查询结果不能枚举多次

在实体框架中的存储过程中使用 IQueryable

这是因为存储过程输出结果集的类型不是 IQueryable.. 您必须使用 IEnumerable 才能使存储过程正常工作