我在一对多关系中有两个实体: 仪表(1)->(n)读数
我相信我的两个实体均已正确设置以提供该关系,因此可以假定。
我希望检索具有相关读数的仪表,但是由于每米可能有很多读数,因此我希望通过例如Reading.Date来限制它。另一个选择是每米最多读取X个读数。
如何在EF.Core中做到这一点?
答案 0 :(得分:2)
我认为错过的另一个答案是,您要的是相关实体的子集,即不是整个相关实体的集合。
如果您希望对获取的相关实体保持选择性,则不能仅依靠Include
语句(或隐式延迟加载),因为它们被设置为加载所有相关实体。
没有选择性的Include
。但是您可以制作一个包容性的Select
:
DateTime filterDate = DateTime.Now;
var myData = db.Meters
.Select(m => new
{
Meter = m,
Readings = m.Readings.Where(r => r.Date == filterDate)
})
.ToList();
备注
Where(r => r.Date == filterDate)
可以得到改进(检查Date
组件或范围),这只是一个简单的示例。您可以在此处使用所需的任何过滤条件。Include
语句。 Select
(在尚未枚举的IQueryable
上)不需要显式的Include
,因为Select
本身已经知道要获取的数据。meter.Readings
导航道具中。这将导致对该列表是子集还是整个集的混淆,当您调用SaceChanges()
时,EF可能会将其实际注册为更改。导航道具不应用作具有相同类型但功能含义不同的收藏存储空间。答案 1 :(得分:-1)
如果您的表设计正确,即Meter中的键已与Reading映射(请参阅外键约束),则EF在访问其POCO类时会自动提供相关记录。 确保读数具有数据库中仪表表的外键。