C# 具有可为空字符串的条件的Linq左联接
这是查询..我需要转换为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
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,
};