0

我需要检索一个集合

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 类的任何想法?

4

1 回答 1

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();
于 2013-09-28T11:52:07.203 回答