使用 Lambda 语法的 C# LINQ 多个 GroupJoin

2024-01-06

我有 3 个表,我试图使用左连接将它们组合在一起。在我的应用程序中,所有 LINQ 表达式都是查询链格式(lambda 表达式)。

我试图弄清楚如何使用 LINQ 完成这个查询;

这是我的 SQL 查询;

select i.INVOICE_NUMBER, ic.CustomerName, o.BusinessUnit
from Invoices_Daily as i
left join intercompany as ic on i.customer_number = ic.customernumber
left join ordertypes as o on i.LINE_ORDERTYPE = o.OrderType

我尝试过结合GroupJoin如下;

var commissions = data
    .GroupJoin(genericNameList,
        d => d.CUSTOMER_NUMBER,
        g => g.CustomerId,
        (d, g) => new { d, generic = g.FirstOrDefault() })
    .GroupJoin(intercompanies,
        dd => dd.d.CUSTOMER_NAME,
        i => i.CustomerId,
        (d, i) => new { data = d.d, intercompanies = i.FirstOrDefault() })
    .Select(_ => new MainGridViewModel
    {
        INVOICE_DATE = _.d.INVOICE_DATE,
        EndCustomer = _.generic == null ? _.d.CUSTOMER_NAME : _.generic.EndCustomer ?? _.d.CUSTOMER_NAME,
        LINE_ORDERTYPE = _.i.OrderType
    })
    .ToList();

但是我有一个语法错误,如下所示;

错误 CS0411 无法从用法推断方法“Enumerable.GroupJoin(IEnumerable, IEnumerable, Func, Func, Func, TResult>)”的类型参数。尝试显式指定类型参数。


我根据请求编写了一个测试示例,显示了正确的语法,这应该都可以工作。

public class Data
{
    public string CUSTOMER_NUMBER { get; set; }
    public string CUSTOMER_NAME { get; set; }
}

public class NameList
{
    public string CustomerId { get; set; }

}

public class InterCompanies
{
    public string CustomerId { get; set; }
}

public class Test
{
    public void TMP()
    {
        var data = new List<Data>();
        var genericNameList = new List<NameList>();
        var intercompanies = new List<InterCompanies>();

        var commissions = data
            .GroupJoin(genericNameList,
                d => d.CUSTOMER_NUMBER,
                g => g.CustomerId,
                (d, g) => new { d, generic = g.FirstOrDefault() })
            .GroupJoin(intercompanies,
                dd => dd.d.CUSTOMER_NAME,
                i => i.CustomerId,
                (d, i) => new { data = d.d, intercompanies = i.FirstOrDefault() })
            .ToList();
    }
}

我最初的想法是,您的 CUSTOMER_NUMBER 和 CUSTOMER_NAME 是错误的,因为为什么同一类中有 2 个具有相同值的字段。但既然你向我保证它们是正确的,也许你正在交换连接中数据预期的字段顺序,如果不看到你的数据模型,很难判断。

也许你的第二次加入应该如下所示:

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

使用 Lambda 语法的 C# LINQ 多个 GroupJoin 的相关文章

  • C# AES Rijndael - 检测无效密码

    我正在使用 Rijndael 加密程序中的一些敏感数据 当用户输入错误的密码时 大多数情况下CryptographicException抛出消息 填充无效且无法删除 然而 CryptStream 不会抛出密码错误的异常 而是返回错误解密的流
  • 静态成员函数与C语言绑定?

    以下 C 代码可使用 Visual C 和 g 进行编译 struct S static void foo extern C void S foo struct T static void foo extern C void T foo a
  • 错误 C2064:术语不计算为采用 1 个参数的函数

    class Student bool Graduate return m bGraduate class School vector
  • ObservableCollection 上的“Cascade”绑定,包含其他 ObservableCollection

    我有一个项目需要显示合同列表 Class Affaire 每个合约都有一个阶段列表 类别阶段 我使用绑定在 2 个不同的 ListView 中显示它们中的每一个 问题是当我从 ListView 中删除一个 Phase 时 显示 Phases
  • 优化对绑定到 DataGridView 的 DataTable 的更新

    我的应用程序中有一个显示一些数据的表单 当我第一次显示表单时 我将一些数据加载到 DataTable 中 然后将 DataTable 绑定到 DataGridView 我还启动了一个异步方法来执行一些较慢的数据库查询 当这些慢查询完成时 我
  • 使用 boost::iterator_facade<>

    我有一个链表结构 struct SomeLinkedList const char bar int lots of interesting stuff in here DWORD foo SomeLinkedList pNext 它是现有
  • CMake - 未定义参考

    我正在尝试将 gtest 包含到我的项目中 问题是我在 GTest 中收到未定义的引用错误 我正在尝试在 Gtest 中测试 Node 类 在节点的构造函数中 我使用类记录器 尽管我已将库记录器添加到 gtest target 中 但我仍然
  • F# 内联如何工作?

    对于 F 我的理解是您可以使用 inline 关键字在调用站点执行类型专门化 那是 val inline a gt b gt c when a or b static member a b gt c 约束条件是 a or b必须有一个静态成
  • 适用于 Windows 的键值数据库?

    除了 MongoDB 和 Memcached 之外 Windows 上还运行哪些键值存储 我见过的大多数似乎只能在 Linux 上运行 Hypertable Redis Lightcloud 相关链接 是否有经过商业验证的云存储 Key g
  • 在标准库中静态链接时如何支持动态插件?

    假设一个应用程序myapp exe是使用构建的g 它使用标志 static libstdc 这样就可以安装在没有环境的情况下libstdc so myapp exe还添加了对某些功能的插件支持plugf可以通过动态加载dlopen来自共享库
  • Java 中 LINQ 的等价物是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Java 中 LINQ 的等价物是什么 没有什么比 LINQ for Java 更好的了 Edit 现在
  • 一些涉及类析构函数和删除运算符的内存管理问题?

    在阅读了一些教程后 我仍然不清楚 C 中内存管理的一些观点 1 当使用 new 运算符声明的类超出范围时 是否会调用其析构函数并释放内存 是否有必要调用删除运算符来释放类的内存并调用其析构函数 class Test void newTest
  • 如何在 C# 中通过 JavaScript 回调运行 QUnit 测试并获取测试结果?

    在我的几个项目中 我使用 MVC 模式将代码 关注点 分为 3 层 模型层和控制层都在 C 上运行 因此我使用 MSTest 或 NUnit 等测试框架来验证这些层的功能需求 对于视图层 我使用 QUnit 来测试 JavaScript 文
  • C语言中如何将整数转换为字符? [复制]

    这个问题在这里已经有答案了 C语言中如何将整数转换为字符 C 中的字符已经是数字 字符的 ASCII 代码 无需转换 如果要将数字转换为相应的字符 只需添加 0 即可 c i 0 0 是 ASCii 表中的一个字符
  • 派生类的聚合初始化

    以下代码无法使用 Visual Studio2017 或在线 GDB 进行编译 我期望它能够编译 因为迭代器只是一个具有类型的类 并且它是从公共继承的 这是不允许的还是在 VS2017 中不起作用 template
  • 使用std::begin()、std::end()将ArrayXd转换为stl向量,

    在我看来我应该能够使用std begin and std end 转换ArrayXd to std vector
  • 检测用户是否正在滚动 dataGridView 滚动条

    我正在更新一个dataGridView与一个新的数据表使用 dataGridView1 DataSource table 但是 我不想在用户滚动 dataGridView 时执行此操作 如何检查滚动条是否正在滚动或已完成滚动 即拖动而不是单
  • MonoGame 中的 ContentLoadException

    我一直在尝试使用 Xamarin Studio 在 MonoGame 中加载纹理 我的代码设置如下 region Using Statements using System using Microsoft Xna Framework usi
  • 即使对于新上下文,OnModelCreating 也仅调用一次

    我有多个相同但内容不同的 SQL Server 表 在编写代码优先 EF6 程序时 我尝试为每个程序重用相同的数据库上下文 并将表名称传递给上下文构造函数 然而 虽然每次都会调用构造函数 但尽管每次都是从 new 创建数据库上下文 但 On
  • 如何使用字符串的值将字符串转换为 wstring?

    我是 C 新手 我有这个问题 我有一个名为 DATA DIR 的字符串 需要将其格式化为 wstring string str DATA DIR std wstring temp L s str Visual Studio 告诉我没有与参数

随机推荐