1
私は私のコードをより良くするためにみますと、私は次の関数に次のメソッドでパラメータとしてIQueryableを取得するにはどうすればよいですか?
エラーのIQueryableを取得する方法を知らない:
An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code
Additional information: The operation cannot be completed because the DbContext has been disposed.
これが問題である:
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;
これは、前のコードです変更:
List<GitUser> favoritesList = new List<GitUser>();
using (var db = new GitContext())
{
var 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);
foreach (var result in results)
{
var user = (from u in db.GitUsers
where u.Id == result.GitUserId
select new { u }).First();
favoritesList.Add(user.u);
}
return favoritesList;
変更後のコード:
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;
}
あなたは 'IQueryable'を使用して取得できません! –