LINQ - 获取特定单元格值时的null异常

时间:2016-09-09 10:33:44

标签: c# asp.net-mvc linq null

对于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的最佳方法。

谢谢!

1 个答案:

答案 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"]是否为空。 ...