當談到LINQ時,我是一個新手。我讀過一些空例外,其中大部分人士指出LINQ - 獲得特定單元格值時的空例外
...在sth.AsEnumerable()...
因爲問題的根源。
我碰到:
功能評價要求所有線程運行。
我試圖找回
字段名
從TrashPlaces(它有2場只有 - ID和名稱)的字符串ID,我從UserPlace記錄得到(UserPlace有2把鑰匙 - 1是userId,可以從AspNetUsers中檢索,另一個是TrashPlace id)。我已經在這個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最好的辦法感謝。
謝謝!
當你訪問你的上下文實體(比如'UserPlace','TrashPlaces'等等)時,你會得到一個IQueryable集合。在我們的查詢中,您將IQueryable(這是一個不在內存中的集合,而是轉換爲SQL查詢並由DBMS處理)轉換爲IEnumerable,它將每個實體的結果加載到內存中(這意味着您獲取了它們並且它們在上下文)。外部部分將在LINQ-to-objects而不是LINQ-to-SQL上運行。首先將它作爲IQueryable運行,然後將結果存入內存。下面的答案是你應該遵循的。 – gdyrrahitis