我需要检索
的集合public class TemperatureModel
{
public string SensorType { get; set; }
public double RoomTemperature { get; set; }
public DateTime Created { get; set; }
}
表示数据库中表示的每个温度传感器的最新室温。
我有一个Linq查询,可以检索为每个温度传感器写入数据库的最新室温。
var latestTemperatureQuery =
from temperature in db.RoomTemperature
join sensor in db.Sensor on temperature.SensorId equals sensor.Id
group temperature by temperature.SensorId into groupedRoomTemperature
select groupedRoomTemperature.OrderByDescending(t => t.Created)
.FirstOrDefault();
我正在努力修改上面的查询以填充TemperatureModel DTO / POCO类。我显然必须执行 JOIN 操作以从适用的数据库表中获取适当的SensorType,然后必须执行类似
的操作select new TemperatureModel
{
SensorType = // Selected SensorType value.
RoomTemperature = // Selected RoomTemperature value.
Created = // Selected Created value.
}
同时仍然只选择为每个温度传感器写入数据库的最后温度。有关如何修改此查询以填充我的DTO / POCO类的任何想法吗?
答案 0 :(得分:0)
好的,我找到了解决方案,希望这有助于将来的某些人。我使用 let 关键字来跟踪写入数据库的最新房间温度。通过这样做,我可以执行所有连接,将结果选择到我的DTO / POCO类中,然后通过按日期排序并使用 .First()选择最新的。我将linq查询更改为
var latestTemperatureQuery =
from temperature in db.RoomTemperature
join sensor in db.Sensor on temperature.SensorId equals sensor.Id
join sensorType in db.SensorType on sensor.TypeId equals sensorType.Id
let temperatureModel = new TemperatureModel
{
SensorType = sensorType.Type,
RoomTemperature = temperature.Temperature,
Created = temperature.Created
}
group temperature by temperatureModel.SensorId into groupedTemperatureModel
select groupedTemperatureModel.OrderByDescending(t => t.Created)
.FirstOrDefault();