Linq左关联查询只取最新的一条数据

Liu_LY95 2017-08-24 07:32:01


```
var deviceState = from di in _deviceInfoManager.FindList()
join ds in _deviceStateManager.FindList(0, a => a.OccurTime >= System.DateTime.Now.AddMinutes(-10), a => a.Time, false) on new { tokenID = di.TokenStationId, deviceNo = di.DeviceNo } equals new { tokenID = ds.TokenStationId, deviceNo = ds.DeviceNo } into dids
from ds in dids.DefaultIfEmpty()
select new B04DeviceState
{
DeviceNo=di.DeviceNo,
DeviceState=ds!=null?ds.DeviceState:(short)0
};
return deviceState;
```

背景:di设备信息表,存储设备静态信息,ds设备状态表,存储设备状态信息,每1分钟插入一条记录。
问题:用设备信息表左联设备状态表最近10分钟的记录,存在网络断开,如果左联为空直接给状态等于0的,如果不为空,那么状态就等于最新一条记录的状态。怎么处理取最新的一条记录状态。

表信息:
设备信息表
DeviceNo DeviceName
1 A设备
2 B设备

状态表
DeviceNo state time
1 3 10:00
1 2 10:01
1 1 10:02

希望得到的结果集为

DeviceNo state
1 1
2 0

...全文
3285 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Love天风 2020-05-13
  • 打赏
  • 举报
回复
引用 3 楼 Liu_LY95 的回复:
已用,Take()解决
光用take 好像也不行啊
Liu_LY95 2017-08-27
  • 打赏
  • 举报
回复
已用,Take()解决
Liu_LY95 2017-08-25
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
.first()
Di是个iQueryble<T>,那么join ds的时候,ds.first()肯定不行啊
threenewbee 2017-08-24
  • 打赏
  • 举报
回复
.first()

8,494

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧