在获取某些单元格值时出现LINQ - null异常
本文关键字:LINQ null 异常 获取 单元格 | 更新日期: 2023-09-27 18:06:31
在LINQ方面我是个新手。我读过一些null异常,大多数都指向
…
是问题的根源。
我遇到了:
函数求值需要所有线程运行。
我试图检索
字段名
从TrashPlaces(它只有2个字段- id和名称)由字符串id我从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的最佳方法。
谢谢!
您可以一次完成所有操作(顺便说一下,不要太早枚举,这对性能不利)。
不知道为什么你使用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"]
是否不为空。div…