簡體   English   中英

Linq:當object為null時,將引發異常

[英]Linq: When object is null an exception is thrown

我在查詢時遇到困難。

string userId = User.Identity.GetUserId();         
var houseViewModel = this.Data.Houses.All()                
    .Where(u => u.UserId == userId && u.Name == houseName)
    .Select(h => new HouseViewModel
    {                   
        Id = h.Id,
        Name = h.Name,
        ImageUrl = h.ImageUrl,                   
        FloorsViewModel = h.Floоrs.Where(f=>f.Id>0) 
        .Select(f => new FloorViewModel
        {
            Name = f.Name,
            RoomViewModel = f.Rooms.Where(r => r.Id > 0) 
            .Select(r => new RoomViewModel
            {
                Id = r.Id,
                Name = r.Name,                           
                SensorViewModel = new SensorViewModel
                {
                    Id = r.Sensor.Id,
                    CurrentTemp = r.Sensor.CurrentTemp,

                },                           
            })
        })
    })
   .SingleOrDefault();     

當他來到沒有傳感器引發異常的房間時,因為SensorViewModel Id是不可為空的屬性。

SensorViewModel = new SensorViewModel
{ 
    Id = r.Sensor.Id,
SensorViewModel = r.Sensor == null ? new SensorViewModel() : new SensorViewModel
{
  Id = r.Sensor.Id,
  CurrentTemp = r.Sensor.CurrentTemp,
},                           

下次嘗試。 僅選擇帶傳感器的房間。

  RoomViewModel = f.Rooms.Where(r => r.Id > 0 && r.Sensor != null) 
    .Select(r => new RoomViewModel
    {
        Id = r.Id,
        Name = r.Name,                           
        SensorViewModel = new SensorViewModel
        {
            Id = r.Sensor.Id,
            CurrentTemp = r.Sensor.CurrentTemp,

        },                           
    })

最后一次嘗試,從EF中選擇數據到列表中,然后創建viewmodel

var house = this.Data.Houses.All()                
    .Where(u => u.UserId == userId && u.Name == houseName).ToList();
var houseViewModel = house.Select(h => new HouseViewModel
    {                   
        Id = h.Id,
        Name = h.Name,
        ImageUrl = h.ImageUrl,                   
        FloorsViewModel = h.Floоrs.Where(f=>f.Id>0) 
        .Select(f => new FloorViewModel
        {
            Name = f.Name,
            RoomViewModel = f.Rooms.Where(r => r.Id > 0) 
            .Select(r => new RoomViewModel
            {
                Id = r.Id,
                Name = r.Name,                           
                SensorViewModel =r.Sensor == null ? null : new SensorViewModel
                {
                    Id = r.Sensor.Id,
                    CurrentTemp = r.Sensor.CurrentTemp,

                },                           
            })
        })
    })
   .SingleOrDefault();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM