select * from ( select id,RecordTime,EquipmentId, thisPower, ROW_NUMBER() over( partition by EquipmentId order by RecordTime desc) as new_index from ElectricityMeter_History ) A WHERE new_index=1 转成linq
时间: 2024-03-23 13:38:37 浏览: 12
您可以使用以下的 LINQ 语句来实现相同的功能:
```csharp
var result = from a in (from e in ElectricityMeter_History
group e by e.EquipmentId into g
select new
{
EquipmentId = g.Key,
new_index = g.OrderByDescending(x => x.RecordTime).Select(x => x.id).FirstOrDefault()
})
join b in ElectricityMeter_History on a.new_index equals b.id
select new
{
b.id,
b.RecordTime,
b.EquipmentId,
b.thisPower
};
```
其中,我们首先使用 `group by` 将 `ElectricityMeter_History` 按照 `EquipmentId` 进行分组,然后使用 `OrderByDescending` 对分组后的数据按照 `RecordTime` 进行降序排序,并取每组的第一个元素的 `id`,作为新的索引 `new_index`。接着,我们将新的索引表 `a` 与原始表 `ElectricityMeter_History` 进行 `join`,并根据新的索引表 `a` 中的 `new_index` 字段,筛选出最新的记录。最后,我们将结果映射为匿名类型,并返回查询结果 `result`。
请注意,以上代码仅供参考,具体实现方式可能会因为环境、数据结构等因素而有所不同。