c# - 如何使用 linq 从具有最新 dateTime 的集合中获取整个记录?
问题描述
我有一个实体,它有很多列,并且在一对多关系中具有到另一个实体的导航属性,现在在我的导航属性中我有一个 col dateTimeStamp,现在我想获取包括我的导航属性记录的记录,但只有那些具有最新的日期时间戳。我们如何使用 Lambda 表达式 linq 查询来做到这一点?
实体看起来像
public class EntityA {
int entityAId {get;set;}
string desc {get;set;}
...
<ICollection<EntityB>> EntitiesB {get;set;}
}
public class EntityB {
int entityAId {get;set;}
int entityBId {get;set;}
dateTime dateTimeStamp {get;set;}
...
EntityA EntityANavi {get;set;}
}
}
因此,每个 EntityA 都有许多 EntityB,但我只想要具有最新 dateTime 的 EntityB 记录,如何使用 lambda 表达式和 linq 运算符来做到这一点?
数据看起来像: -
EntityA
EntityAId Desc ...
12 sample1
22 sample2
EntityB
EntityBId EntityAId DateTimeStamp ....
1 12 2020-04-01-10:10:01
1 12 2020-04-01-10:10:21
1 12 2020-04-01-10:11:01
2 22 2020-04-01-11:10:51
2 22 2020-04-01-11:11:01
结果:一个对象
EntityA :{
{entityAId : 12,
desc: sample1
...
EntitiesB :{
EntityB:{ EntityAId:12, EntityBId :1, DateTimeStamp :2020-04-01-10:11:01 .... }
},
{entityAId : 22,
desc: sample2
...
EntitiesB :{
EntityB:{ EntityAId:22, EntityBId :2, DateTimeStamp :2020-04-01-11:11:01 .... }
}
}
}
我尝试使用EntityA.Include( a => a.EntitiesB.orderByDescending(b => b.DateTimeStamp).First() )
但我不断收到错误
解决方案
我想获取包括我的导航属性记录在内的记录,但只获取具有最新 dateTimeStamp 的记录。
var entityAWithItsNewestEntityB = dbContext.EntitiesA.Select(entityA => new
{
// Select the EntityA properties that you plan to use:
Id = entityA.Id,
Name = entityA.Name,
...
NewestEntityB = entityA.EntitiesB
.OrderByDescending(entityB => entityB.DateTimestamp)
.Select(entityB => new
{
// Select only the EntityB properties that you plan to use
Id = entityB.Id,
Name = entityB.Name,
...
// Foreign key not needed, you already know the value:
// EntityeAId = entityB.EntityAId,
})
.FirstOrDefault(),
});
换句话说:从 EntityA 对象集合中的每个 EntityA 对象中,选择一个或多个属性。还按 DateTimeStamp 的降序对该 EntityA 的所有 EntityB 对象进行排序,以使最新的 EntityB 排在第一位。从 EntityB 对象的这个有序序列中,选择几个属性。从结果中只取第一个,如果 EntityA 根本没有 EntityB 对象,则取 null。
简单的来吧您好!
推荐阅读
- python - 使用 InceptionV3 的迁移学习时,1 epoch 后未显示验证准确度
- python - wait_for 检查不起作用 discord.py
- python-3.x - 如何从 Instagram 抓取用户详细信息?
- node.js - 如何通过查找功能检查猫鼬中的存在和空?
- ios - 注入 III:与 BitCode 的可插入冲突
- python-3.x - expr*、expr 有什么区别?Python3.6 AST 抽象语法中的 expr 和 expr?
- sql - Oracle PL/SQL - 如何在 select 语句中使用 varchar 表?
- c - const 指针的声明与 const 整数的声明
- django - Getting the following error: Could not find a version that satisfies the requirement command-not-found==0.3
- python - Python中的交叉表和卡方检验