Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架代码首先基于关系选择项_C#_Linq_Entity Framework_Ef Code First - Fatal编程技术网

C# 实体框架代码首先基于关系选择项

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

我有两个表是使用EntityFramework6首先使用代码设置的

成员表

  • MemberID
  • 名字
  • 姓氏
  • 电子邮件
  • 会员地址

  • MemberAddressID
  • 地址
  • 城市
  • 陈述
  • 拉链
  • 删除
  • MemberID
  • 我试图实现的是抓取一个成员实体,并让EF自动抓取与成员地址的关系,到目前为止,它工作正常

    我一直坚持的是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();
    
    这将返回该
    成员的所有
    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。在您继续发布一天左右的答案后,这绝对是完美的。谢谢