Как предотвратить потерю данных при использовании list< T & gt; Источник которого имеет тип iqueryable< T>
Я использую
IQueryableи список. Это мой код :
<pre lang="C#">public ActionResult List(chap = false) {
IQueryable<UserInfo> userQuery = context.UserInfoes.Include("aspnet_Users") .Include("aspnet_Users.aspnet_Membership") .Include("Pshycologists").OrderBy(m => m.aspnet_Users.UserName);
List<UserInfo> userInfoList = new List<UserInfo>(); UserInfo userInfoRow = new UserInfo();
var userQueryForChapter = userQuery.OrderBy(a => a.aspnet_Users.UserName); foreach (var row in userQueryForChapter) { var stagesUserCompleted = (from au in db.aspnet_Users join spu in db.StagePageUsers on new { UserId = au.UserId } equals new { UserId = (Guid)spu.UserId } join sp in db.StagePages on new { StagePageId = (Int32)spu.StagePageId } equals new { StagePageId = sp.StagepageId } join s in db.Stages on new { StageID = (Int32)sp.StageID } equals new { StageID = s.StageId } where au.UserId == row.UserId select s ).ToList(); if (stages.Count == stagesUserCompleted.Count) { userInfoRow = row; } userInfoList.Add(userInfoRow); }
var users = userInfoList.ToPagedList(страница, 100);
ViewBag. searchKey = пользователь;
return View(пользователи);
}
При использовании этого кода я получаю ошибку в поле зрения. Ошибка заключается в следующем "
Object reference not set to an instance of an object.Ошибка находится в этой строке
@item.aspnet_Users.UserName
Я предполагаю, что причина ошибки заключается в том, что я конвертируюсь из
IQueryable<UserInfo>
к
List<UserInfo>. Это привело к потере стоимости aspnet_Users.имя пользователя. Как я могу преобразовать в список и все еще не потерять значение aspnet_Users.Имя пользователя ?? Я отладил и выяснил, что aspnet_Users.Имя пользователя равно null в строке var users = userInfoList.ToPagedList(страница, 100); (значение userInfoList.aspnet_Users.UserName-это null, где as-значение есть в userQuery.aspnet_Users.имя пользователя ).
Кто-нибудь поможет??
Что я уже пробовал:
Я добавил код var users = userInfoList.ToPagedList(страница, 100).AsQueryable (); чтобы сделать его как queryable, но я получил ошибку "элемент модели, переданный в словарь, имеет тип 'System.Linq.EnumerableQuery`1[Kats.DAL.UserInfo]', но для этого словаря требуется элемент модели типа 'PagedList.IPagedList`1[Kats. DAL. UserInfo]'."
Philippe Mori
Очевидно, что вы должны улучшить свои навыки отладки... На самом деле, как указано в решении 1, легко увидеть, что ваш код неправильно обрабатывает количество несоответствий. Поставив условную точку останова на линию, где userInfoRow
если добавить его в список, а затем переместить текущую строку выполнения в первую строку цикла, то можно было бы найти проблему менее чем за минуту...