在 linq 的外连接中使用过滤器

2023-12-13

我有以下实体:

public class Company
    {
        public string CompanyName { get; set; }
        public int ID { get; set; }
    }

public class CompanyCurrency
{
    public int Id { get; set; }
    public int CompanyId { get; set; }
    public decimal Rate { get; set; }
    public int CurrencyId { get; set; }
}

public class Currency
{
    public int ID { get; set; }
    public string Name { get; set; }
}

我需要获取一个国家的货币列表。如果一个国家/地区没有货币条目,我也需要为该缺少的条目添加一行。

我现在的声明是:

var  currencies  = 
from c in Currencies
join cc in CompanyCurrency 
on  c.ID equals cc.CurrencyId 
into jointable
from resultiten in  jointable.DefaultIfEmpty()


select new {c.Name  ,
HasEntry =  resultiten == null ? 0:1,  
rate =  resultiten != null ? resultiten.Rate:0 ,
}  ;

这不是由 CountryID 过滤的。我尝试添加过滤器

from c in Currencies
join cc in CompanyCurrency 
on  c.ID equals cc.CurrencyId 
into jointable
from resultiten in  jointable.DefaultIfEmpty()
where resultiten.CompanyId == 1 || resultiten == null


select new {c.Name  ,
HasEntry =  resultiten == null ? 0:1,  
rate =  resultiten != null ? resultiten.Rate:0 

但对于除公司 ID 1 以外的公司已输入的货币,这不会产生结果。

相应的 SQL 查询将是

select  * 
from [dbo].[Currency] c
left outer join [dbo].[CompanyCurrency] cc
on c.id = cc.Currencyid
and cc.[Companyid] = 1

您需要应用过滤器before the join:

join cc in CompanyCurrency.Where(e => e.CompanyId == 1)

或作为连接的一部分

on new { CurrencyId = c.ID, CompanyId = 1 } equals new { cc.CurrencyId, cc.CompanyId }

For inner join这并不重要,但是对于outer join这很重要(顺便说一句,同样适用于 SQL 查询)。

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

在 linq 的外连接中使用过滤器 的相关文章

随机推荐

  • 选择从月初到当前日期的记录

    我正在尝试选择在当月开始和当天之间添加到数据库中的记录 我或多或少知道如何获取当天以及特定时间段内的记录 但我该如何得到它 以便从当前日历月的月初开始 DECLARE sm DATETIME SET sm DATEADD DAY 1 DAY
  • 解释器环境中的python垃圾收集和_下划线

    如果一个类是在解释器环境中定义的 class C object def init self val self x val 然后实例化 不带名称 gt gt gt C 1 gt gt gt C 2 gt gt gt 那么我们可以使用下划线 来
  • 序列化/反序列化机制

    说吧 我有课X它有一个字段值 即 class X implements Serializable private int value 此外 它还有此处未显示的 getter 和 setter 这个类是序列化的 在反序列化时 同一类具有值字段
  • jsPDF添加图表

    我正在使用 jsPDF 通过 Appcelerator 的 Titanium 生成 PDF 文档 现在我需要添加一个包含两个部分的简单饼图 我怎样才能以最简单的方式做到这一点 它不需要什么花哨的东西 我正在考虑首先生成图像 然后将该图像添加
  • Android Studio 问题缺少 debug.keystore

    每次我想签署我的 aok 时 我都会失败Missing debug keystore它说它实际上应该位于此路径 Store 下 C Users jamie android debug keystore但没有任何密钥库文件 我怎样才能创建一个
  • 通过优先考虑其中一列来合并数据框中的 2 列

    假设我有以下 data frame Value1 Value2 a
  • PHP 正则表达式无法处理数据库中的字符串

    preg replace当我在从数据库获取的字符串上使用它时 不会返回所需的结果 result DB connection connection gt select my query foreach result as row prints
  • PopupWindow 内的 ListView 的问题

    我有一个ListView in a PopupWindow The PopupWindow像这样初始化 window setContentView root window setTouchable true window setFocusa
  • 在 wpf 中找不到事件“SelectedIndexChanged”

    在 winform 中 当我创建组合框时 我可以找到事件 SelectedIndexChanged 活动工作after组合框的索引已更改 private void comboBox1 SelectedIndexChanged object
  • bash 通过匹配列合并文件

    我有两个文件 File1 12 abc 34 cde 42 dfg 11 df 9 e File2 23 abc 24 gjr 12 dfg 8 df 我想逐列合并文件 如果第 2 列相同 输出如下 File1 File2 12 23 ab
  • Angular2中的递归动态模板编译

    我的一些工作基于此处描述的相同问题 使用 Angular 2 0 编译动态组件的动态模板 如何使用 创建动态模板来使用 Angular 2 0 编译动态组件 可以找到上述问题中描述的工作plunkerhere 如果动态详细信息尝试创建另一个
  • 如何通过切换视图来改变小部件?

    我想要一个平滑的动画 可以在以前的比例和位置之间切换到当前的比例和位置 但看起来它并不是之前的精确比例或位置 为什么唯一的第一个小部件具有反向比例 gt ZoomIn 而不是 ZoomOut 我添加了一个 isSet 变量 因为第一帧显示的
  • 使用部分下载 (HTTP) 下载文件

    有没有办法使用部分下载功能通过 HTTP 下载巨大且仍在增长的文件 看来这段代码每次执行时都会从头开始下载文件 import urllib urllib urlretrieve http www example com huge growi
  • Laravel 服务提供商给出“目标 [接口] 不可实例化”错误

    我的错误信息 Illuminate Container BindingResolutionException Target Project Backend Service Validation ValidableInterface is n
  • 在c中返回一个数组

    我想知道是否有任何方法可以返回 char 数组 我尝试了类似 char fun 的方法 但出现错误 我不需要指针解决方案 谢谢 您可以通过将数组包装在结构中来返回数组 struct S char a 100 struct S f struc
  • jquery validate:如何使字段在更改时进行验证?

    在 jquery 的 validate 插件上 只有当用户将焦点放在另一个元素上时 错误消息才会消失 我想让它在写入正确信息后立即消失 如何 onchange 触发验证 selector validate onkeyup true
  • AdoQuery 使用参数时出错

    我需要更新字段值 增加旧值 像这样的东西 UPDATE MYTABLE SET FIELD1 FIELD1 VALUE WHERE 但是当运行下一个代码时我遇到了这个错误 参数对象不正确 定义的 不一致或不完整 已提供信息 这是我的代码 A
  • 在画布周围移动一个矩形

    我的应用程序中间有一个画布 周围有控件 我有一个接收点并将它们保存在列表中的套接字 我在画布上画了 4x4 的小矩形来表示列表中的点数 说有 4 个点 有 4 个矩形 我希望能够在点随代码变化时移动矩形 如果没有故事板或任何 动画 类 这可
  • 如何设置连接超时

    我正在查看下面的 C 代码 它设置了一个 http 连接并打开了一个请求 或者我相信是这样 并且想增加连接超时值 以便我可以发送更大的文件 我知道这不是处理大文件的最佳解决方案 但我觉得它是最快的解决方案 而且现在时间是一个大问题 编辑 我
  • 在 linq 的外连接中使用过滤器

    我有以下实体 public class Company public string CompanyName get set public int ID get set public class CompanyCurrency public