实体框架代码首先根据关系选择项目
本文关键字:关系 选择 项目 框架 代码 实体 | 更新日期: 2023-09-27 18:26:26
我有两个表,它们是使用实体框架6首先使用代码设置的。
成员表
- 成员ID
- 名字
- 姓氏
- 电子邮件
会员地址
- 成员地址ID
- 地址
- 城市
- 州
- Zip
- 已删除
- 成员ID
我试图实现的是获取一个成员实体,并让EF自动获取与member Addresses的关系,到目前为止,这一切都很好。
我所坚持的是,EF正在从Member Addresses表中获取所有对象,尽管我已经将一些记录标记为IsDeleted=true。
这是我的疑问,不确定我做错了什么。
return GenRepo.Context.Member.Where(x => x.MemberID == MemberID && x.MemberAddresses.Any(y => y.IsDeleted == false)).FirstOrDefault();
也许类似于:
return GenRepo.Context.MemberAddresses.Where(ma => ma.MemberID == MemberID && ma.IsDeleted == false).ToList();
这将返回该Member
的所有非IsDeleted
的MemberAddress
对象
或者,如果你想从Member
方面着手,也许你可以将你的结果投影到一个新的对象中:
return (GenRepo.Context.Member.Where(m => m.MemberID == MemberID)
.Select(m => new {
MemberID = m.MemberID,
FirstName = m.FirstName,
LastName = m.LastName,
Email = m.Email,
MemberAddresses = m.MemberAddresses.Where(ma => ma.IsDeleted == false)
})).ToList()
.Select( m => new Member {
MemberID = m.MemberID,
FirstName = m.FirstName,
LastName = m.LastName,
Email = m.Email,
MemberAddresses = m.MemberAddresses
}).First();
我不知道有什么方法可以直接在LINQ语句中过滤它,不过可能有一种方法。
编辑由于在LINQ查询中投影到一个实体存在问题,这应该可以解决这个问题,因为.ToList()
只在一个实体上,所以几乎没有性能成本。另外,我不喜欢DTO。