实体框架 - 包含在子查询中? - 第2部分

2024-04-16

我不确定这是否是正确的做法,我确信有人会告诉我是否正确。

我问了一个问题(实体框架 - 包含在子查询中? https://stackoverflow.com/questions/1662760/entity-framework-include-in-sub-query)今天晚上早些时候,得到了很好的回答并解决了我的问题。但是,我认为可能有更好的方法,所以我要重新问这个问题,但略有不同。

假设我有 3 张表:

餐厅 1.....M 菜单类别 1.....M 菜单项 我有一个 L2E 查询,如下所示:

餐厅 = context.Restaurant .Include(r => r.MenuCategory) .FirstOrDefault(r => r.RestaurantId == resaurantId); 这在一定程度上有效,但它只预加载菜单类别。

我真正想做的是:

Restaurant = context.Restaurant
.Include(r => r.MenuCategory)
.Include(r => r.MenuCategory.MenuItems)
.FirstOrDefault(r => r.RestaurantId == resaurantId);

但显然这是不可用的,因为 r.MenuCategory 是一个可枚举的

...解决方法是使用标准符号:

context.Restaurant.Include("MenuCategory.MenuItems");

...但这不是强类型的。这个问题是关于寻找一个强类型 answer

这是当前的扩展方法:

public static ObjectQuery<T> Include<T>(this ObjectQuery<T> query, Expression<Func<T, object>> path)
{
    // Retrieve member path:  
    List<PropertyInfo> members = new List<PropertyInfo>();
    EntityFrameworkHelper.CollectRelationalMembers(path, members);

    // Build string path:  
    StringBuilder sb = new StringBuilder();
    string separator = "";
    foreach (MemberInfo member in members)
    {
        sb.Append(separator);
        sb.Append(member.Name);
        separator = ".";
    }

    // Apply Include:  
    return query.Include(sb.ToString());
}

如何对其进行调整以允许强类型形式:

context.Restaurant.Include("MenuCategory.MenuItems");

我有一个提示可以实现这一点:技巧 28 - 如何实施急切加载策略 http://blogs.msdn.com/alexj/archive/2009/07/25/tip-28-how-to-implement-include-strategies.aspx

我认为使用了一个漂亮的技巧。

Alex

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架 - 包含在子查询中? - 第2部分 的相关文章

  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj

随机推荐

  • 构建一个完整的在线支付网关,如 Paypal [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 所以这个问题不是关于将现有的支付网关集成到我的网站中 这更多的是一个架构问题 我想建立一个类似于Paypal 的系统 现在我知道 Pa
  • 如何使用 Firebase 函数向用户发送 FCM?

    Firebase 目前已推出Firebase 功能添加服务器端代码 Firebase 功能 https firebase google com docs functions 我想知道当数据库发生某些变化时是否可以通过这些函数调用 FCM 通
  • DB2 将 ISO 8601 时间戳字符串转换为 DB2 时间戳

    我有一个要求 我需要获取两个 ISO 8601 时间戳格式的字符串 并且必须比较它们并获取它们的最大时间戳 字符串采用以下格式 2014 06 11T16 45 45Z 为了进行比较 我需要将它们转换为 DB2 时间戳 然后进行比较 问题出
  • 获取 Roslyn 中类之间的依赖关系

    我使用 Roslyn 成功获取了项目之间的依赖关系 现在我想获取类之间的依赖关系 类似于 Visual Studio Enterprise 中的代码映射功能 这是我的代码 部分是我想象我能得到一些东西的地方 不过 我对 Roslyn API
  • VBA用于在文本溢出时缩小PowerPoint中的字体

    我正在尝试为 PowerPoint 文件找到一个宏 该文件是通过 CAT 工具进行语言转换后导出的 在某些语言对中 由于语言长度的差异 翻译的内容将无法放入源文件文本框中 因此 翻译和导出的 PowerPoint 文件包含多个形状 文本框
  • 检测是否安装了 SQL Server Compact Edition 3.5 SP2 x64?

    我正在构建一个安装程序 并且想要引导 SQL Server Compact Edition 3 5 SP2 问题是我正在寻找注册表项HKLM SOFTWARE Microsoft Microsoft SQL Server Compact E
  • 如何向文本框添加按钮?

    我正在尝试制作一个右侧带有按钮的文本框 我的代码 public partial class TextBoxButton TextBox Category Button Description Button in textbox public
  • SQL Server 中的 DECODE() 函数

    SELECT PC COMP CODE R PC RESUB REF DECODE PC SL LDGR CODE 02 DR CR PC DEPT NO DEPT PC DEPT NO PC SL LDGR CODE PC SL ACNO
  • Jquery mobile 中的选择选项出现问题

    我有一个表格 其中包含输入文本以及选择选项和按钮 单击按钮时将克隆表格行 除了选择选项之外 一切都工作正常 克隆表行后 选择选项不会显示我选择的内容 这是 JsFiddlehttp jsfiddle net aravinth Ad22d h
  • Android 中相机捕获图像的图像叠加

    我需要用相机拍照 同时在相机视图顶部显示叠加图像 拍照后 我需要保存用户在拍照时看到的内容 有人可以建议我吗 请 public void onPictureTaken byte data Camera camera Bitmap camer
  • 检查orientdb中是否存在类

    如何检查东方数据库中是否存在类 如果它不存在于数据库中 我需要创建它并插入一条记录 如果存在 我需要插入该记录 我需要使用 JAVA 做同样的事情 您可以使用以下语句通过 SQL 检索架构信息 select expand classes f
  • 如何读取 Windows 特定扩展名

    在 OpenGL superible 中 示例说我可以通过以下方式读取 Windows 特定扩展 Type defined in the book as char but that is not what glGetString retur
  • C# 在发布模式下运行时,调试语句会被编译出来吗?

    使用说似乎是理想的 就可读性而言 Debug WriteLine写入输出而不是大量 if DEBUG声明 当程序在发布模式下编译时 所有开销都用Debug WriteLine消失就好像它不存在一样 或者该函数仍然被调用 但内部没有执行任何操
  • 使用“xts”包中的“to.weekly”函数导致错误的周末结束日期

    我有一个非常奇怪的问题 我正在使用to weekly and to period函数来转换每日xts反对每周数据 在大多数情况下 我将周末结束日期设为星期五 day of week函数将返回 5 例如 2010 01 08 2011 02
  • 如何从网络共享调试 Visual Studio 2010 中的解决方案?

    我最近购买了一台新的 Mac 笔记本电脑 并在 Parallels 虚拟机中运行 VS2010 它对我来说基本上运行良好 但我在调试特定项目类型时遇到了一些问题 这与项目是通过网络共享访问的事实有关 测试项目无法运行 因为测试运行程序无法加
  • 使用 Access 2007 中窗体上的按钮打开外部文件

    我正在为我的部队创建一个数据库 我在陆军 我需要一个按钮 单击该按钮即可启动文件 该文件是一个 xfdl 文件 用于 PureEdge 程序中的军事表格 这是否可能以及我将如何去做 我已经尽我所能地搜索了它 但似乎我的 Google Fu
  • 在Linux下,C++源代码如何成为可执行文件或静态/动态库。以及程序运行时如何加载到内存中

    我知道源代码可以编译并链接到共享 静态库或 ELF 可执行文件 当程序运行时 它会加载到内存中并根据ELF格式创建一个进程映像 但我不确定程序如何加载共享库 链接器如何在外部库中查找符号以及 a 存档如何工作 如果程序在 64 位操作系统上
  • Android onFocusChange 被多次触发

    我正在使用列表适配器 扩展 SimpleCursorAdapter 来填充一些数据 我在bindView 中调用View SetOnFocusChangeListener 其中我将侦听器附加到所需的EditText 问题是该事件被触发 4
  • Java JList 滚动到所选项目

    我有一个JList里面有很多项目 其中一个被选中 我想滚动到此中选定的项目JList 因此用户可以快速查看选择了哪个项目 我怎样才能做到这一点 String data one two three four AND A LOT MORE JL
  • 实体框架 - 包含在子查询中? - 第2部分

    我不确定这是否是正确的做法 我确信有人会告诉我是否正确 我问了一个问题 实体框架 包含在子查询中 https stackoverflow com questions 1662760 entity framework include in s