实体框架包含左连接这可能吗?

2024-02-07

我有以下表格

  1. 教室(班级ID、班级名称)
  2. 学生班级(学生ID,班级ID)
  3. 学生(学生ID、学生姓名等)
  4. 学生描述。 (学生描述 ID、学生 ID、学生描述)

我想检索学生的所有信息==1

在 sql 中,我会执行如下操作并获取有关学生的所有信息。

 select * from Student s
 join StudentClass sc on s.StudentID=sc.StudentID
 join ClassRoom c on sc.ClassID=c.ClassID
 left join StudentDescription sd on s.StudentID=sd.StudentID
 where s.StudentID=14

现在是我的问题。使用 EF4 我做了类似的事情,但无法使其工作。 您还可以进行包含和左连接

尝试1

private static StudentDto LoadStudent(int studentId)
    {
        StudentDto studentDto = null;
        using (var ctx = new TrainingContext())
        {
            var query = ctx.Students
                .Include("ClassRooms")
                .Include("StudentDescriptions")
                .Where(x=>x.StudentID==studentId)
                .SingleOrDefault();

            studentDto = new StudentDto();
            studentDto.StudentId = query.StudentID;
            studentDto.StudentName = query.StudentName;
            studentDto.StudentDescription = ??

        }

        return studentDto;
    }

尝试2又不完整且错误

using (var ctx = new TrainingContext())
         {
             var query = (from s in ctx.Students
                             .Include("ClassRooms")
                         join sd in ctx.StudentDescriptions on s.StudentID equals sd.StudentID into g
                         from stuDesc in g.DefaultIfEmpty()
                         select new
                                    {
                                        Name=s.StudentName,
                                        StudentId=s.StudentID,

         }).SingleOrDefault();

正如你所看到的,我不知道我在这里做什么。 如何将该 Sql 转换为 EF 查询?


对的,这是可能的。

首先,.Include执行 LEFT OUTER JOIN,使用导航属性你穿过。

这就是您在之间显式执行 LEFT JOIN 的方式Student and 学生描述:

var query = from s in ctx.Students
            from sd in s.StudentDescriptions.DefaultIfEmpty()
            select new { StudentName = s.Name, StudentDescription = sd.Description };

正如您所看到的,它根据之间的实体关联执行 JOINStudents and 学生描述。在您的 EF 模型中,您应该有一个名为的导航属性学生描述在你的Student实体。上面的代码只是使用它来执行连接,并且默认为空。

代码基本相同.Include.

请不要混淆左连接 vs 左外连接。

他们是一样的东西。

“OUTER”关键字是可选的,我相信它是为了 ANSI-92 兼容性而存在的。

Just .Include您查询中需要的一切:

using (var ctx = new TrainingContext())
        {
            studentDo = ctx.Students
                .Include("ClassRooms")
                .Include("StudentDescriptions")
                .Where(x=>x.StudentID==studentId)
                .Select(x => new StudentDto
                        {
                            StudentId = x.StudentId,
                            StudentName = x.StudentName
                            StudentDescription = x.StudentDescription.Description
                        })
                .SingleOrDefault();
        }

基本上,确保所有 FK 都表示为模型上的导航属性,如果是这样,则不需要执行任何连接。您需要的任何关系都可以通过.Include.

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

实体框架包含左连接这可能吗? 的相关文章

  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定

随机推荐

  • Django 从数据库自动完成

    我有一个这样的模型 class Baslik models Model user models ForeignKey User null True blank True title models CharField max length 5
  • 为什么 getenv() 返回非常量字符串

    我正在阅读以下文档std getenv 功能于cppreference com http en cppreference com w cpp utility program getenv它说 修改 getenv 返回的字符串会调用未定义的行
  • 什么是多字节字符集?

    术语 多字节 是指其字符可以 但不必 宽于 1 个字节的字符集 例如 UTF 8 还是指在任何情况下都宽于 1 个字节的字符集 例如 UTF 16 换句话说 如果有人谈论多字节字符集 这意味着什么 该术语含糊不清 但在我的国际化工作中 我们
  • 将多列合并为一列

    我有一个数据集如下 GN Datum Land AG GKV MTCR GKV NSGI GKV NSGII GKV WA GKV ML GKV Wert 8 11693 2012 01 05 Kenia 5A001f 159700 9 1
  • 我将如何改进这个充当规范的 7 行 Linq 查询?

    顶部的 BigQuery 获取一组产品和嵌套的相关表 然后 我在规范模式上进行了一次糟糕的尝试应用过滤 这是过滤器代码 查询中有三个表 我想通过嵌套在底部查询中的值来过滤顶部查询 就像我说的 这目前产生了我们想要的结果 然而 Contain
  • 如何提供一系列交错线程来显示代码中断并且不提供完美的同步?

    我知道下面的代码是做什么的 我知道为什么它是一个损坏的同步代码 因为它只有一个条件变量 而我们需要两个 但我不知道如何提供一系列交错线程来显示它不起作用 您能举例说明为什么此代码不起作用吗 1 cond t cond PTHREAD CON
  • MySQL 错误 #1005(代码 150)

    我尝试过创建此表 但我尝试过的任何方法都无法从 FK 中实现 CREATE TABLE tb AutSituacao id int 11 NOT NULL AUTO INCREMENT Nome varchar 50 CHARACTER S
  • 如何将一个项目添加为另一个项目的依赖项?

    有两个独立的项目 myWarProject and MyEjbProject 所以当我构建myWarProject我需要安装MyEjbProject到本地存储库 这样我就可以在 myWarProject 中定义为依赖项并成功打包 myWar
  • 在 C 语言的 for 循环条件中调用 strlen() 的最佳替代方法是什么?

    我读到在 for 循环条件中调用 strlen 是不好的做法 因为这是一个 O N 操作 然而 在寻找替代方案时 我看到两种可能的解决方案 int len strlen somestring for int i 0 i lt len i o
  • 使用 jsoup 或 gquery 获取纯 XML

    我最近想知道有没有一个好的 Java 中 XML 操作库 一个不错的 Java XML DOM 实用程序 https stackoverflow com questions 6996013 a nice java xml dom utili
  • opencv warpPerspective 的替代方案

    我正在使用 opencv warpPerspective 函数来扭曲图像中找到的 countour 以查找轮廓 我正在使用 findContours 如下图所示 但是 warpPerspective 函数需要 更多时间 才能扭曲到完整图像
  • 如何在 spring-servlet.xml 中自动装配 CRUD 存储库?

    当我们在 spring mvc 中使用 crud 存储库时 我们收到以下错误 4352 localhost startStop 1 ERROR org springframework web context ContextLoader Co
  • 从另一个窗口更新 WPF 中的 DataGrid

    我在名为 MainWindow 的窗口上有一个 DataGrid 控件 从 MainWindow 中 我通过单击按钮使用以下代码打开另一个名为 NewCustomerWindow 的窗口 NewCustomerWindow newCusto
  • 如何将 DbContext.Database.SqlQuery(sql, params) 与存储过程一起使用? EF 代码优先 CTP5

    我有一个具有三个参数的存储过程 我一直在尝试使用以下内容返回结果 context Database SqlQuery
  • GoogleMap 未显示我所做的更改

    我有一个片段 其中我使用 或者更确切地说 想要使用 Google 地图 该片段位于操作栏和选项卡主机之间 该片段的布局是
  • Jboss Java EE 容器和 ExecutorService

    我有一个独立的 java 应用程序 它使用 ExecutorService 并行处理多个作业 ExecutorService es Executors newFixedThreadPool 10 我现在想在 EJB bean 中重复使用相同
  • 手臂上的推入和弹出

    我真的不明白堆栈命令或堆栈一般如何工作 说如果我有 PUSH R3 POP R3 第 1 行 这是否意味着 R3 的内容将被放入堆栈顶部 如果 R3 改变 堆栈的内容会改变吗 第 2 行 在第二行中 堆栈顶部的内容是否会从堆栈移至 R3 中
  • 将左对齐的短文本块居中

    使用 margin 0 auto 可以轻松地将长文本居中 并使用边距或填充控制距离 但是 是否可以在不知道宽度以及该文本是否左对齐的情况下将文本居中 将短文本居中 文本左对齐 我不知道宽度 这是要检查的示例 http jsfiddle ne
  • 如何在 iPhone 的自定义导航栏中创建导航栏项目?

    我创建了一个自定义视图 并添加了一个 Web 视图作为该自定义视图的子视图 我以编程方式创建了一个导航栏 现在我想在该视图中创建一个左或右导航栏按钮 navigBar UINavigationBar alloc initWithFrame
  • 实体框架包含左连接这可能吗?

    我有以下表格 教室 班级ID 班级名称 学生班级 学生ID 班级ID 学生 学生ID 学生姓名等 学生描述 学生描述 ID 学生 ID 学生描述 我想检索学生的所有信息 1 在 sql 中 我会执行如下操作并获取有关学生的所有信息 sele