Я - greenhorn, когда дело доходит до LINQ. Я прочитал некоторые нулевые исключения, и большинство из них отметилLINQ - исключение null при получении определенного значения ячейки
... в sth.AsEnumerable() ...
как корень проблемы.
я столкнулся:
Оценка функции требует, чтобы все потоки для запуска.
Я попытался получить
FIELDNAME
из TrashPlaces (он имеет 2 поля только - идентификатор и имя) от строки Id я получаю от UserPlace записи (UserPlace имеет 2 ключа - 1 - это userId, который может быть получен из AspNetUsers, а другой - идентификатор TrashPlace). Я столкнулся с проблемой нуль на этом LINQ код:
public ActionResult JsonResult()
{
var users = db.AspNetUsers;
//this was added, so I could root out mismatch in the queryId
var nameformyuser = User.Identity.Name;
//the null starts here and no-shock it goes further (meaning query is null and
//can't do nothing later)
var queryId = from user in users.AsEnumerable()
where user.Email == User.Identity.Name
select user.Id;
var placerecord = db.UserPlace;
var userplace = from uplace in placerecord.AsEnumerable()
where uplace.usersId == queryId.ToString()
select uplace.placesId;
var places = db.TrashPlaces;
var field = from blah in places.AsEnumerable()
where blah.Id == userplace.ToString()
select blah.nameOfThePlace;
TempData["username"] = User.Identity.Name;
TempData["fieldname"] = field.ToString();
TempData["datename"] = DateTime.Now;
List<TrashViewModel> json = (List<TrashViewModel>)TempData["jsonList"];
return View(json);
}
Был бы признателен за помощь и/или совет, что это лучший подход к каскадным LINQ.
Спасибо!
Вы получаете коллекцию IQueryable при доступе к своим объектам контекста (например, «UserPlace», «TrashPlaces» и т. Д.). В наших запросах вы бросаете IQueryable (который представляет собой сборник не в памяти, а скорее преобразуется в SQL-запрос и обрабатывается СУБД), в IEnumerable, который загружает результаты каждого объекта в память (что означает, что вы их загрузили, и они находятся в контекст). Внешняя часть будет вести себя как LINQ-to-objects, а не LINQ-to-SQL. Сначала запустите его как IQueryable, а затем принесите результаты в память. Ниже приведен ответ, за которым следует следовать. – gdyrrahitis