如何使用Linq Entity实现仅当表末条IsAll为true时返回该数据
问题原因
你原有代码的逻辑是先筛选所有IsAll = true的公告,再从中取ID最大的条目,跳过了所有IsAll = false的记录,自然无法校验全表最新条目的IsAll状态,不符合需求。
正确实现
有两种常用写法,逻辑完全匹配你的要求:
写法1:分步查询(可读性更高)
先取全表最新的一条记录,再判断它的IsAll状态:
// 取整张表按ID降序的第一条(即最新记录) var latestBroadcast = db.Broadcasts.OrderByDescending(x => x.Id).FirstOrDefault(); // 仅当最新记录存在且IsAll为true时返回该记录,否则返回null var msg = latestBroadcast?.IsAll == true ? latestBroadcast : null;
写法2:单条LINQ查询(可直接被EF翻译为SQL,性能更优)
先取最新的1条记录,再对该条做IsAll校验:
var msg = db.Broadcasts .OrderByDescending(x => x.Id) .Take(1) .Where(x => x.IsAll == true) .FirstOrDefault();
该逻辑会被翻译为:先对全表按ID倒序排序,取第一条后判断IsAll是否为true,符合要求就返回该条,否则返回空。
内容的提问来源于stack exchange,提问作者Ashwin
相关产品推荐
相关产品推荐

