gpt4 book ai didi

c# - LINQ 连接查询(表之间可以为空的引用)

转载 作者:行者123 更新时间:2023-11-30 20:04:10 25 4
gpt4 key购买 nike

我有3张 table 。

例如客户公司地址

  • 客户已引用公司。

  • 公司有 2 个可空的地址引用(账单和送货),因此在某些情况下地址可能不存在。

我需要进行连接查询,但是当 Company.BillingAddressCompany.ShippingAddress 等于 null 时,我无法得到所有信息数据)。

我试过了(但查询错误):

var res = (from client in context.Clients
join clientCompany in context.Companies
on client.ClientCompanyId equals clientCompany.Id

into clientCompanyJoin

from company in clientCompanyJoin
join addressBilling in context.Addresses
on company.BillingAddressId equals addressBilling.Id

join addressShipping in context.Addresses
on company.ShippingAddressId equals addressShipping.Id

select new
{
Client = client,
Company = company,
BillingAddress = ???????
ShippingAddress = ???????
}
);

你能帮我做一个连接查询或者解释一下怎么做吗?

谢谢。

最佳答案

试试这段代码片段:

var res = (from client in context.Clients
join clientCompany in context.Companies
on client.ClientCompanyId equals clientCompany.Id
into clientCompanyJoin
from company in clientCompanyJoin
join addressBilling in context.Addresses
on company.BillingAddressId equals addressBilling.Id
where !String.IsNullOrEmpty(addressBilling.Address)
join addressShipping in context.Addresses
on company.ShippingAddressId equals addressShipping.Id
where !String.IsNullOrEmpty(addressShipping.Address)
select new
{
Client = client,
Company = company,
BillingAddress = addressBilling.Address,
ShippingAddress = addressShipping.Address
});

已添加:根据您的评论,这是您需要的代码片段。您现在可以拥有您的客户公司数据,即使ShippingAddressIdBillingAddressId 等于null 就像 Left JoinSQL 中所做的那样。

var res = (from client in context.Clients
join company in context.Companies
on client.ClientCompanyId equals company.Id
join addressBilling in context.Addresses
on company.BillingAddressId equals addressBilling.Id
into addrBillingGroup
from gAddrBilling in addrBillingGroup.DefaultIfEmpty() // left join
join addressShipping in context.Addresses
on company.ShippingAddressId equals addressShipping.Id
into addrShippingGroup
from gAddrShipping in addrShippingGroup.DefaultIfEmpty() // left join
select new
{
Client = client,
Company = company,
BillingAddress =
gAddrBilling == null ? null : gAddrBilling.Address,
ShippingAddress =
gAddrShipping == null ? null : gAddrShipping.Address
});

关于c# - LINQ 连接查询(表之间可以为空的引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13341858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com