实体框架:查询子实体[重复]

2024-04-26

看来我无法从数据库中获取父级及其子级的子集。

例如...

db.Parents
.Include(p => p.Children)
.Where(p => p.Children.Any(c => c.Age >= 5))

这将返回所有有 5 岁以上孩子的“父母”,但如果我迭代“Parents.Children”集合,所有孩子都将出现(而不仅仅是 5 岁以上的孩子)。

现在这个查询对我来说确实有意义(我要求包含子项并且我已经得到了它们!),但可以想象我希望在某些情况下将 where 子句应用于子集合。

我怎样才能得到一个 IEnumerable,其中每个父母都有一个经过过滤的孩子集合(年龄>=5)?


在单个数据库往返中获取具有已过滤子集合的父集合的唯一方法是使用投影。不可能使用预加载(Include)因为它不支持过滤,Include始终加载整个集合。 @Daz 显示的显式加载方式需要每个父实体进行一次往返。

Example:

var result = db.Parents
    .Select(p => new
    {
        Parent = p,
        Children = p.Children.Where(c => c.Age >= 5)
    })
    .ToList();

您可以直接使用这个匿名类型对象的集合。 (您还可以投影到您自己的命名类型而不是匿名投影(但不能投影到像Parent).)

EF 的上下文也将填充Children的集合Parent如果您不禁用更改跟踪(使用AsNoTracking()例如)。在这种情况下,您可以将父项从匿名结果类型中投影出来(发生在内存中,没有数据库查询):

var parents = result.Select(a => a.Parent).ToList();

parents[i].Children将包含每个过滤的子项Parent.


Edit到问题中的最后一次编辑:

我正在寻找 a) 拥有 5 岁以上孩子的父母名单(以及 仅包括那些孩子)。

上面的代码将返回all父母,并且只包括孩子Age>= 5,所以如果只有孩子,父母也可能有一个空的孩子集合AgeWhere条款让父母只得到有的父母最后一个 (Any)孩子与Age>= 5:

var result = db.Parents
    .Where(p => p.Children.Any(c => c.Age >= 5))
    .Select(p => new
    {
        Parent = p,
        Children = p.Children.Where(c => c.Age >= 5)
    })
    .ToList();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架:查询子实体[重复] 的相关文章

  • 不支持关键字:“元数据”。?使用 MVC3 在实体框架中使用 Sql 连接

    我将 Entity Framework 4 与我的 Asp Net MVC3 应用程序一起使用 我的问题是我正在使用实体框架对我的数据库执行操作 工作正常 出于其他目的 我还使用 Sql Connection 来存储和检索数据库中的数据 我
  • 如何使用SQL Server CE的动态连接字符串?

    我在 Windows 应用程序中使用 SQL Server CE 4 0 并使用实体框架创建它的模型 它工作正常 但我的问题是它没有构造函数来更改连接字符串 并且默认情况下它从app config file using var Contex
  • 实体框架是否支持 SQLClient 连接字符串中的 ApplicationIntent=ReadOnly

    实体框架是否支持应用程序意图 只读 http msdn microsoft com en us library hh205662 aspx在 SQLClient 连接字符串中 它是参考对可用性副本的只读访问 http msdn micros
  • 将列添加到 ASP.NET Identity 中的 AspNetUserClaims

    我在用着Microsoft AspNet Identity Core 2 2 1在我的解决方案中 我需要将其与另一个应自动添加声明的系统集成 为了跟踪哪些声明是手动添加的以及哪些是由外部系统创建的 我希望在我的AspNetUserClaim
  • 实体框架获取前 10 行

    我在 SQL 数据库中有 3 个表 tbl视频 VideoID int PK Title varchar 100 Decription varchar 100 tblTags TagID int PK TagText varchar 100
  • 实体框架左外连接和分组抛出:ORA-00907:缺少右括号

    我在基于实体框架的数据访问中使用实体框架来定位多个数据库 我们是一个使用 Entity Framework 已有 2 年的团队 生成的代码与 sql server 2008 完美配合 现在 我们在将数据库迁移到 Oracle 11 Expr
  • LINQ 到实体日期时间比较

    我在将 LINQ 中的日期与实体表达式进行比较时遇到问题 我想检查一下是否DateTime DateTime whole day 我想这样做 return context Events Any x gt x UserId id x Date
  • 如何在控制器中使用多个 DBContext

    如何在控制器中使用多个 DBContext 我尝试以不同的方式重载构造函数 一些控制器 public C1 DBContext1 a DBContext2 b DBContext3 c public C1 DBContext1 a publ
  • 实体框架 4.1 代码首先在数据库“master”中创建数据库权限被拒绝

    我使用 Entity Framework 4 1 创建了一个通用存储库项目 当作为现有项目添加到项目中时 它非常适合我的项目 但当仅作为 dll 引用时 它对它们不起作用 我收到这个错误 数据库 master 中的 CREATE DATAB
  • 是否可以在对Where 的调用中调用命名方法?

    我试图从 RedGate 的这本免费电子书中了解 Linq 的一些性能影响ftp support red gate com ebooks under the hood of net memory management part1 pdf f
  • 实体框架读取列但阻止其更新

    给定一个数据库表 其中有一列包含历史数据但不再填充 实体框架中是否有一种方法可以读取该列 但在使用相同的模型对象时防止它被更新 例如我有一个对象 public class MyObject public string CurrentData
  • Entity Framework Code First TPH 继承 - 不同的子类可以共享一个字段吗?

    我有一个使用 Entity Framework Code First 创建的实体框架模型 该模型使用每个层次结构表继承 其中结构看起来有点像这样 public abstract class BaseState public int Id g
  • MVC3 和实体框架

    我的问题很简单 将 edmxMVC3 项目的 Web 应用程序的模型文件夹中的文件吗 我的答案非常简单 不要用数据访问逻辑和数据建模搞乱表示层 整个 MVC 应用程序 Visual Studio 解决方案中从下到上至少有 4 个项目 1 P
  • 使用 Linq to Entities 查询创建 null ienumerable

    我正在开发一个使用实体框架的 ASP NET MVC 项目 我需要将从数据库中提取的值投影到PropertyValue类型 如下所示 public class PropertyValue public string StringValue
  • 从数据库加载而不使用代理类?

    在 Entity Framework 4 中 是否可以选择将一些查询加载到 POCO 中而不使用代理类 为了缓存该对象以供将来只读使用 我正在使用存储库 服务模式 我的意思是 var order orderService GetById 1
  • EF - 从自动迁移转向手动迁移

    结束了漫长的一天测试各种场景 我不必重新创建生产数据库 我们从 EF 开始 在开发过程中没有足够明智地从自动迁移转向命名迁移 现在 我正在尝试倒带时钟 并创建与生产数据库一致的初始迁移 是否可以将模型与迁移表中的自动迁移进行对齐 我应该创建
  • 使用 DbMigrationsConfiguration 将ExecutionStrategy 设置为 SqlAzureExecutionStrategy?

    我今天看到一篇关于实现 SqlAzureExecutionStrategy 的帖子 http romiller com tag sqlazureexecutionstrategy http romiller com tag sqlazure
  • 使用经度和纬度查找给定距离内的所有附近客户

    我有一个包含客户经度和纬度的数据库 我有一个搜索表单 用户将在其中输入日志 纬度 距离下拉列表包含 50 英里 100 英里 当用户单击搜索时 我想编写一个 linq 查询从数据库中获取此距离半径内的所有客户 如何使用 C 和 linq 来
  • 学习实体框架[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Web API 的 ASP.NET MVC Core 控制器 PATCH 方法

    给定一个数据库表 Person 包含 3 列 Id 名字和姓氏 使用真实的 DbContext 时 ASP NET Core Web API MVC 控制器方法 PATCH 仅修改姓氏 看起来如何 我根本不知道如何实现它 并且找不到相关教程

随机推荐