如何使用 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 表中选择最后一个条目的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy 仅从连接表中选择列

仅从表中选择最新记录并使其快速,如何?

如何使用 LINQ 仅从实体加载最后一条记录?

如何确保仅从特定表中选择第一条记录,该表可以在 DB2 中包含多个相同 ID 的记录

SQL 仅从当月选择记录

SQL Server 2008 仅从字段中选择日期 [重复]