I am having difficulty with a query.
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();
When he came to the room in which no sensor throws exception because Id
for SensorViewModel
is a non-nullable property.
SensorViewModel = new SensorViewModel
{
Id = r.Sensor.Id,
SensorViewModel = r.Sensor == null ? new SensorViewModel() : new SensorViewModel
{
Id = r.Sensor.Id,
CurrentTemp = r.Sensor.CurrentTemp,
},
next try. Simple select only rooms with sensor.
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,
},
})
last attempt, select data from EF into list and then make 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();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.