实体框架代码首先根据关系选择项目

本文关键字:关系 选择 项目 框架 代码 实体 | 更新日期: 2023-09-27 18:26:26

我有两个表,它们是使用实体框架6首先使用代码设置的。

成员表

  1. 成员ID
  2. 名字
  3. 姓氏
  4. 电子邮件

会员地址

  1. 成员地址ID
  2. 地址
  3. 城市
  4. Zip
  5. 已删除
  6. 成员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的所有非IsDeletedMemberAddress对象

或者,如果你想从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。