C# 实体框架代码首先基于关系选择项
我有两个表是使用EntityFramework6首先使用代码设置的 成员表C# 实体框架代码首先基于关系选择项,c#,linq,entity-framework,ef-code-first,C#,Linq,Entity Framework,Ef Code First,我有两个表是使用EntityFramework6首先使用代码设置的 成员表 MemberID 名字 姓氏 电子邮件 会员地址 MemberAddressID 地址 城市 陈述 拉链 删除 MemberID 我试图实现的是抓取一个成员实体,并让EF自动抓取与成员地址的关系,到目前为止,它工作正常 我一直坚持的是EF正在从Member Addresses表中获取所有对象,即使我已经将一些记录标记为IsDeleted=true 这是我的问题,我不确定我做错了什么 return GenRepo.Cont
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();
这将返回该成员的所有MemberAddress
对象,这些对象未IsDeleted
或者,如果您想从成员
方面着手,您可以将结果投影到一个新对象中:
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。如果我正确地遵循,这将返回第一个成员
对象,其中任何成员地址
对象都有IsDeleted==false
,但它不会限制它只返回IsDeleted==false
。它仍然会返回所有的MemberAddress
objects。在您继续发布一天左右的答案后,这绝对是完美的。谢谢