如何使用 linq 实体仅从 sql 表中选择最后一个条目
Posted
技术标签:
【中文标题】如何使用 linq 实体仅从 sql 表中选择最后一个条目【英文标题】:How to select only the last entry from sql table using linq entity 【发布时间】:2021-12-12 10:21:07 【问题描述】:我有一个表格,我们存储在会议期间在屏幕上显示的公告会议 ID,现在我的雇主希望我添加一个按钮,该按钮可以向所有会议室发送公告,而不管房间 ID,我将此类公告保存在在名称 IsAll 下具有 true 或 false 位值的表,所以现在我想知道的是,如何仅选择表中 Isall 值设置为 true 的最后一个条目
ID | roomid | announcement | IsAll
1 | 1 | example | ....
2 | 10 | test | true
在这种情况下,我想获得 id 为 2 的公告
ID | roomid | announcement | IsAll
1 | 1 | example |false
2 | 10 | test | true
3 | 10 | test | false
在这种情况下,我不希望 SQL 从表中返回任何内容,而我尝试过这样做
var msg = db.Broadcasts.Where(x => x.IsAll == true).OrderByDescending(x => x.Id).FirstOrDefault();
但它总是返回一个不是最优的值,我该如何实现呢?谢谢
【问题讨论】:
值不是最优是什么意思? 对不起,我只是说在第二种情况下,查询一定不能返回任何公告文本,如果最后有一个 IsAll 设置为 true 的条目,我只需要返回跨度> 那么您是说要检查最后一条记录,并且仅在 IsAll 为真时才返回该记录? 是的,你是对的 【参考方案1】:所以您需要做的就是选择最后一项并检查 IsAll 值是否为真;
public Broadcast GetLastGlobalMessage()
var lastBroadcast = db.Broadcasts.OrderByDescending(x => x.Id).FirstOrDefault();
if(lastBroadcast !=null && lastBroadcast.IsAll)
return lastBroadcast;
return null;
【讨论】:
非常感谢您的回答,您让我的工作轻松了很多。以上是关于如何使用 linq 实体仅从 sql 表中选择最后一个条目的主要内容,如果未能解决你的问题,请参考以下文章
使用 LINQ 和实体框架在一个 SQL 查询中从多个表中提取数据