Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有可为空字符串的条件的Linq左联接_C#_Linq - Fatal编程技术网

C# 具有可为空字符串的条件的Linq左联接

C# 具有可为空字符串的条件的Linq左联接,c#,linq,C#,Linq,这是查询..我需要转换为linq/ select *, from agentList ag inner join branchList br on ag.BranchId=br.Id inner join bankList ba on br.BankId =ba.Id left join accounts ac

这是查询..我需要转换为linq/

 select *, from  agentList ag
                        inner join branchList br on ag.BranchId=br.Id
                        inner join  bankList ba on  br.BankId =ba.Id
                        left join  accounts ac 
                         on br.BrIN=ac.BranchId and  ba.BaIN = ac.BankId 
                           and ac.AIN=ac.Id   //This  NUllable in C#
Linq:

var最终版本=

            from ag in agentList
            join br in branchList on ag.BranchId equals br.Id
            join ba in bankList on br.BankId equals ba.Id
            join ac in accounts on new { ag.Id, br.Id, ba.Id } equals new { ac.AgentId,ac.BranchId, ac.BankId } 
            
            select new 
            {
                AccountName = ac.AccountName,

            };
因为AIN是可为空的字符串,所以我得到以下错误

因为在可为空的字符串中。。如何在条件中使用可禁用的属性进行左联接


编辑:

Linq:

因为AIN是可为空的字符串,所以我得到以下错误

因为在可为空的字符串中。。如何在条件中使用可禁用的属性进行左联接

“由于AIN是可为空的字符串,所以出现以下错误”-不,您之所以会出现错误,是因为您正在创建一个具有非唯一属性名称的匿名类型,并且您正在创建的两个类型中的名称不匹配

你需要这样的东西:

var final =
    from ag in agentList
    join br in branchList on ag.BranchId equals br.Id
    join ba in bankList on br.BankId equals ba.Id
    join ac in accounts
        on new
        {
            AgentId = ag.Id,
            BranchId = br.Id,
            BankId = ba.Id 
        }
        equals new
        {
            ac.AgentId,
            ac.BranchId,
            ac.BankId
        }
    select new
    {
        AccountName = ac.AccountName,
    };

要比较两个匿名类型,属性名称、类型及其顺序必须相同。

首先为相应的匿名类型成员指定一个相同的名称,因为这是第一个要求,如果需要,请检查类型。e、 g.
在新的{K1=br.BrIN,K2=ba.BaIN}上等于新的{K1=ac.BranchId,K2=ac.BankId}
请参见,下次将异常作为文本发布。图像在许多设备上都是一个讨厌的东西。好的。@gertarnoldhanks。但是我在屏幕截图>“加入ac帐户”中遇到了相同的错误。你能检查一下吗?另外,我已经更改了我对AgentId的查询可以为空。@Ajt-请不要编辑问题以使现有答案无效。如果你有进一步的问题,可以在现有问题的末尾加上一个问题,或者问一个新问题。我已经尽力解决了您的问题,但您可能需要进行一些微调。但请保留基本结构。@Ajt-还请理解,新发布的查询仍然具有具有不同属性名称的匿名类型。我的答案对您的两个LINQ查询都是100%有效的。@Ajt-您可以测试它以找出答案,但它应该可以正常工作。
var final =
    from ag in agentList
    join br in branchList on ag.BranchId equals br.Id
    join ba in bankList on br.BankId equals ba.Id
    join ac in accounts
        on new
        {
            AgentId = ag.Id,
            BranchId = br.Id,
            BankId = ba.Id 
        }
        equals new
        {
            ac.AgentId,
            ac.BranchId,
            ac.BankId
        }
    select new
    {
        AccountName = ac.AccountName,
    };