对于LINQ,我是个新手。我读过一些空的异常,其中大多数指出
...在sth.AsEnumerable()...
作为问题的根源。
我遇到了:
功能评估需要运行所有线程。
我试图检索
字段名
来自TrashPlaces(它只有2个字段 - id和name)字符串我从UserPlace记录获得(UserPlace有2个键 - 1是userId,可以从AspNetUsers中检索,另一个是TrashPlace id)。我在这个LINQ代码上遇到了null问题:
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的最佳方法。
谢谢!
答案 0 :(得分:2)
你可以做到一切(顺便说一下,不要早点枚举,这对性能不利)。
不确定为什么使用ToString()
,如果您的ID属于同一类型,则不应该这样做。
var query = from u in db.AspNetUsers
join up in db.db.UserPlace on u.Id equals up.usersId
join tp in db.TrashPlaces on up.placesId equals tp.Id
where u.Email == User.Identity.Name
select tp.nameOfThePlace;//or more data if you need to.
var result = query.FirstOrDefault(); //or query.AsEnumerable()
然后你可以进行空检查
if (result == null)
在您的情况下,对于TempData,您可以只做
TempData["fieldname"] = result == null ? string.Empty : result;
或
TempData["fieldname"] = result;
但是,在使用它之前,您必须检查TempData["fieldname"]
是否为空。
...