如何解决按 linq 分组到实体查询以通过加入表来获取具有最新时间戳的记录
有两个表,使用linq查询获取记录。从第二个表中,可以有多个行与带有日期时间戳的第一个表相对应......基于以下查询,我正在获取所有记录,但是有没有办法可以从具有最新时间戳的第二个表中获取行?>
Table Parent
ID Name
1 M
2 N
3 O
4 P
5 Q
Table Child
Id fkID DateTime
1 2 01/12/2021 09:12:20
2 2 01/12/2021 09:13:20
3 2 01/12/2021 09:14:20
4 2 01/12/2021 09:15:20
5 2 01/12/2021 **09:16:20**
Linq 查询:
from p in Parent
join c in Child on p.id equals c.fkId into cJoin
from cJoin in cJoin.DefaultIfEmpty()
select new TempResponse
{
Id = p.Id,Name = p.Name,Date = c.Date
}
I am getting 10 records using above query but just need 5 records i.e. from child table instead of all 5 records,we need a record that has latest time stamp
**expected output**
1 M
2 N 01/12/2021 09:16:20
this record is 5'th record from child table because this one has latest date time stamp
( latest record )
3 O
4 P
5 Q
有什么办法可以使用group by并从第二个表中获取具有最新时间戳的记录吗?
解决方法
假设您已经为 FK 定义了导航属性,我将使用类似的查询;
dbContext.Child.Where(c => c.Date == c.Parent.Child.Max(c2 => c2.Date))
,
我相信你可以使用:
function sales_badge( $text,$post,$product ) {
return $tagType = '<span class="onsale"><img style="max-width: 150px;" src="sale.jpg"></span>';
}
add_filter('woocommerce_sale_flash','sales_badge',99,3 );
请注意,除非您在 var ans = from p in Parent
join cmax in (
from c in Child
group c by c.fkId into cg
select cg.OrderByDescending(c => c.Date).FirstOrDefault())
on p.Id equals cmax.fkId into cJoin
from c in cJoin.DefaultIfEmpty()
select new TempResponse {
Id = p.Id,Name = p.Name,Date = c != null ? c.Date : null
};
之前添加另一个 orderby
子句以强制排序,否则 SQL Server 上的结果顺序似乎有所不同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。