Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在下一个方法中获得IQueryable作为参数?_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 如何在下一个方法中获得IQueryable作为参数?

C# 如何在下一个方法中获得IQueryable作为参数?,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我将努力使我的代码更好,但我不知道如何使iQuery能够运行到下一个函数 错误: 中发生“System.InvalidOperationException”类型的异常 EntityFramework.dll,但未在用户代码中处理 其他信息:操作无法完成,因为 DbContext已被释放 这是一个问题: public List<GitUser> FavoritesUsersListFromHistory(IQueryable users) { List<G

我将努力使我的代码更好,但我不知道如何使iQuery能够运行到下一个函数

错误:

中发生“System.InvalidOperationException”类型的异常 EntityFramework.dll,但未在用户代码中处理

其他信息:操作无法完成,因为 DbContext已被释放

这是一个问题:

public List<GitUser> FavoritesUsersListFromHistory(IQueryable users)
    {
        List<GitUser> favoritesList = new List<GitUser>();
        using (var db = new GitContext())
        {
            foreach (CookiesHistory result in users) <-- users make this error
            {
                var user = (from u in db.GitUsers
                            where u.Id == result.GitUserId
                            select new { u }).First();

                favoritesList.Add(user.u);
            }
        }
        return favoritesList;
public List favorites用户列表fromHistory(IQueryable用户)
{
列表收藏夹列表=新列表();
使用(var db=new GitContext())
{

foreach(CookiesHistory result in users)首先,错误是由于创建作为参数传递的查询时使用的上下文在您尝试迭代结果时已被释放。因此,我的第一个建议是将上下文变量创建为全局变量:

public class FavoriteController
{
   protected GitContext db;
   public FavoriteController()
   {
     db=new GitContext();
   }

  public IEnumerable<GitUser> FavoritesUsers(int cookieId, int count)
  {
        return FavoritesUsersListFromHistory(TopFavoritesUsers(cookieId, count));
  }

  //create a class (CookiesHistoryDTO) to save the result of this query
  public IQueryable<CookiesHistoryDTO> TopFavoritesUsers(int cookieId, int count)
  {

        IQueryable<CookiesHistoryDTO> results = (from ch in db.CookiesHistory
                                               where ch.GitUserId != null
                                               where ch.MyCookieId == cookieId
                                               group ch by new { ch.GitUserId, ch.MyCookieId, ch.SearchGitUser } into g
                                               orderby g.Count() descending
                                               select new CookiesHistoryDTO{ GitUserId = g.Key.GitUserId, MyCookieId = g.Key.MyCookieId, SearchGitUser = g.Key.SearchGitUser, Count = g.Count() }
                                              ).Take(count);
        return results;

  }


  public IEnumerable<GitUser> FavoritesUsersListFromHistory(IQueryable<CookiesHistoryDTO> user)
  {
     //Here the context you use to create your first query is still alive
     var userIds=user.Select(e=>e.GitUserId).Contains(e.Id);
     return db.GitUsers.Where(e=>userIds.Contains(e.Id)).ToList();// Here is when both query are going to be executed.
  }

  protected override void Dispose(bool disposing)
  {
    if (disposing)
    {
        db.Dispose();
    }
    base.Dispose(disposing);
  }
}
公共类FavoriteController
{
受保护的GitContext数据库;
公共收藏夹控制器()
{
db=新的GitContext();
}
公共IEnumerable收藏夹用户(int-cookieId,int-count)
{
从历史记录中返回FavoritesUsersListFromHistory(TopFavoritesUsers(cookieId,count));
}
//创建一个类(CookiesHistoryDTO)以保存此查询的结果
公共IQueryable TopFavoritesUsers(整数cookieId,整数计数)
{
IQueryable结果=(来自db.CookiesHistory中的ch
其中ch.GitUserId!=null
其中ch.MyCookieId==cookieId
按新的{ch.GitUserId,ch.mycokieid,ch.SearchGitUser}将ch分组到g中
orderby g.Count()降序
选择new CookiesHistoryDTO{GitUserId=g.Key.GitUserId,MyCokieId=g.Key.MyCokieId,SearchGitUser=g.Key.SearchGitUser,Count=g.Count()}
).记(数);
返回结果;
}
公共IEnumerable FavoritesUsersListFromHistory(IQueryable用户)
{
//在这里,用于创建第一个查询的上下文仍然有效
var userIds=user.Select(e=>e.GitUserId).Contains(e.Id);
返回db.GitUsers.Where(e=>userIds.Contains(e.Id)).ToList();//这是执行两个查询的时间。
}
受保护的覆盖无效处置(布尔处置)
{
如果(处置)
{
db.Dispose();
}
基地。处置(处置);
}
}

您无法从用户处获得
IQueryable
 public FavoritesController(IGitUserRepository repo,  CookieHelper _cookieHelper)
    {
        //myCookieRepository = cookieRepo;IMyCookieRepository cookieRepo,
        repository = repo;
        cookieHelper = _cookieHelper;
    }




    // GET: Favorites
    public PartialViewResult FavoritesRepos()
    {
        IEnumerable<GitUser> favorites = FavoritesUsers(cookieHelper.GetHttpCookieId(), countOfFavoritesUsers);
        return PartialView("_FavoritesRepos", favorites);
    }



    public IEnumerable<GitUser> FavoritesUsers(int cookieId, int count)
    {
            return FavoritesUsersListFromHistory(TopFavoritesUsers(cookieId, count));
    }

    public IQueryable TopFavoritesUsers(int cookieId, int count)
    {
        using (var db = new GitContext())
        {
            IQueryable results = (from ch in db.CookiesHistory
                           where ch.GitUserId != null
                           where ch.MyCookieId == cookieId
                           group ch by new { ch.GitUserId, ch.MyCookieId, ch.SearchGitUser } into g
                           orderby g.Count() descending
                           select new { GitUserId = g.Key.GitUserId, MyCookieId = g.Key.MyCookieId, SearchGitUser = g.Key.SearchGitUser, Count = g.Count() }).Take(count);
            return results;
        }
    }

    public List<GitUser> FavoritesUsersListFromHistory(IQueryable users)
    {
        List<GitUser> favoritesList = new List<GitUser>();
        using (var db = new GitContext())
        {
            foreach (CookiesHistory result in users)
            {
                var user = (from u in db.GitUsers
                            where u.Id == result.GitUserId
                            select new { u }).First();

                favoritesList.Add(user.u);
            }
        }
        return favoritesList;
    }
public class FavoriteController
{
   protected GitContext db;
   public FavoriteController()
   {
     db=new GitContext();
   }

  public IEnumerable<GitUser> FavoritesUsers(int cookieId, int count)
  {
        return FavoritesUsersListFromHistory(TopFavoritesUsers(cookieId, count));
  }

  //create a class (CookiesHistoryDTO) to save the result of this query
  public IQueryable<CookiesHistoryDTO> TopFavoritesUsers(int cookieId, int count)
  {

        IQueryable<CookiesHistoryDTO> results = (from ch in db.CookiesHistory
                                               where ch.GitUserId != null
                                               where ch.MyCookieId == cookieId
                                               group ch by new { ch.GitUserId, ch.MyCookieId, ch.SearchGitUser } into g
                                               orderby g.Count() descending
                                               select new CookiesHistoryDTO{ GitUserId = g.Key.GitUserId, MyCookieId = g.Key.MyCookieId, SearchGitUser = g.Key.SearchGitUser, Count = g.Count() }
                                              ).Take(count);
        return results;

  }


  public IEnumerable<GitUser> FavoritesUsersListFromHistory(IQueryable<CookiesHistoryDTO> user)
  {
     //Here the context you use to create your first query is still alive
     var userIds=user.Select(e=>e.GitUserId).Contains(e.Id);
     return db.GitUsers.Where(e=>userIds.Contains(e.Id)).ToList();// Here is when both query are going to be executed.
  }

  protected override void Dispose(bool disposing)
  {
    if (disposing)
    {
        db.Dispose();
    }
    base.Dispose(disposing);
  }
}