Linq to sql 使用Linq到Sql的左外部联接
我想使用linq to sql查询,该查询将使用内部联接和左外部联接(使用.DefaultIfEmpty()),但查询不起作用。在T-SQL中,这是一个简单的任务,这让我感到困扰。 我的问题是:Linq to sql 使用Linq到Sql的左外部联接,linq-to-sql,Linq To Sql,我想使用linq to sql查询,该查询将使用内部联接和左外部联接(使用.DefaultIfEmpty()),但查询不起作用。在T-SQL中,这是一个简单的任务,这让我感到困扰。 我的问题是: var results = from cy in _dc.Companies join cyv in _dc.CompanyVersions on cy.CompanyId equals cyv.Comp
var results = from cy in _dc.Companies
join cyv in _dc.CompanyVersions
on cy.CompanyId equals cyv.CompanyId
join cyd in _dc.CompanyDetails
on cyv.CompanyVersionId equals cyd.Id
join cd in _dc.CustomerDetails
on cy.CompanyId equals cd.CompanyId
join d in _dc.Documents
on cd.CustomerId equals d.CustomerId
join di in _dc.DocumentItems
on d.DocumentId equals di.DocumentId
join dd in _dc.DocumentDetails
on di.DocDetailsId equals dd.DocumentDetailsId
join dt in _dc.DetailTypes
on dd.detailTypeId equals dt.detailTypeId
join vt in _dc.Vats
on dt.VATCode equals vt.VATCode
join v in _dc.Vouchers.DefaultIfEmpty()
on dd.DocumentDetailsId equals v.DocDetailID
join cc in _dc.CreditCards.DefaultIfEmpty()
on v.CCType equals cc.CCType
where
(d.DocTypeId == 1 || d.DocTypeId == 2) && (d.DocDate >= date)
&&
(d.DocDate < date.AddDays(1)) &&
(d.CompanyVersionId == cyv.CompanyVersionId)
&& (d.isDeleted == false || d.isDeleted == null)
orderby d.DocNumber ascending
select new
{
d.DocumentId,
d.DocNumber,
d.AutUser,
d.GrossAmount,
d.DocTypeId,
cyd.Name,
cyd.AddressLine1,
cyd.AddressLine2,
cyd.TelephoneLine,
cyd.FaxLine,
v.FromVoucNbr,
d.DocDate,
cd.CustomerName,
cd.StreetAddress,
cd.City,
cd.Country,
dt.DetDescr,
cc.CCType,
dd.FreeDescr,
dd.NetAmount,
dd.VATAmount,
vt.VATDescr,
cc.Description,
vt.VATRate
};
var结果=来自dc公司的cy
加入cyv,加入dc.CompanyVersions
关于cy.CompanyId等于cyv.CompanyId
加入cyd in_dc CompanyDetails
在cyv.CompanyVersionId上等于cyd.Id
加入cd-in_dc.CustomerDetails
关于cy.CompanyId等于cd.CompanyId
加入d_dc文档
在cd上,CustomerId等于d.CustomerId
将di加入_dc.DocumentItems
在d.DocumentId上等于di.DocumentId
将dd加入到dc文档详细信息中
在di.DocDetailsId上等于dd.DocumentDetailsId
将dt加入到_dc.DetailTypes中
在dd.detailTypeId上等于dt.detailTypeId
加入悉尼威立雅运输公司
在dt.VATCode上等于vt.VATCode
在_dc.dictions.DefaultIfEmpty()中加入v
在dd.DocumentDetailsId上等于v.DocDetailID
在_dc.CreditCards.DefaultIfEmpty()中加入cc
关于v.CCType等于cc.CCType
哪里
(d.DocTypeId==1 | | d.DocTypeId==2)和&(d.DocDate>=date)
&&
(d.DocDate
有谁能建议我如何在此查询的最后两个表上使用左外部联接吗?您将这两个表都放置了
。DefaultIfEmpty
错误。
我认为是这样的(尽管我不确定where子句…)
var结果=
来自cy in_dc公司
在cy.CompanyId上的_dc.CompanyVersions中加入cyv等于cyv.CompanyId
将cyd加入到cyv上的_dc.CompanyDetails中。CompanyVersionId等于cyd.Id
将cd加入到cy.CompanyId等于cd.CompanyId的客户详细信息中
在cd上的文档中加入d。CustomerId等于d.CustomerId
将di加入到d.DocumentId上的_dc.DocumentItems等于di.DocumentId
将dd加入_dc.DocumentDetails on di.DocDetailsId等于dd.DocumentDetailsId
将dt加入到dd.detailTypeId等于dt.detailTypeId的_dc.DetailTypes中
将vt加入到dt上的_dc.Vats中。VATCode等于vt.VATCode
将dd.DocumentDetailsId等于v.DocDetailID的凭证加入到other1中
来自other1.DefaultIfEmpty()中的o1
加入cc in _dc.CreditCards on v.CCType等于cc.CCType进入其他2
来自other2.DefautlIfEmtpy()中的o2
其中(d.DocTypeId==1 | | d.DocTypeId==2)
&&(d.DocDate>=日期)
&&(d.DocDate
是的联接顺序不正确,我现在已经修复了它,这是正在工作和编译的查询:
另外,谢谢大家的帮助
var results =
from cy in _dc.Companies
join cyv in _dc.CompanyVersions on cy.CompanyId equals cyv.CompanyId
join cyd in _dc.CompanyDetails on cyv.CompanyVersionId equals cyd.Id
join cd in _dc.CustomerDetails on cy.CompanyId equals cd.CompanyId
join d in _dc.Documents on cd.CustomerId equals d.CustomerId
join di in _dc.DocumentItems on d.DocumentId equals di.DocumentId
join dd in _dc.DocumentDetails on di.DocDetailsId equals
dd.DocumentDetailsId
join dt in _dc.DetailTypes on dd.detailTypeId equals dt.detailTypeId
join vt in _dc.Vats on dt.VATCode equals vt.VATCode
join v in _dc.Vouchers on dd.DocumentDetailsId equals v.DocDetailID into
other1
from o1 in other1.DefaultIfEmpty()
join cc in _dc.CreditCards on o1.CCType equals cc.CCType into other2
from o2 in other2.DefaultIfEmpty()
where (d.DocTypeId == 1 || d.DocTypeId == 2)
&& (d.DocDate >= date)
&& (d.DocDate < date.AddDays(1))
&& (d.CompanyVersionId == cyv.CompanyVersionId)
&& (d.isDeleted == false || d.isDeleted == null)
orderby d.DocNumber ascending
select new
{
d.DocumentId,
d.DocNumber,
d.AutUser,
d.GrossAmount,
d.DocTypeId,
cyd.Name,
cyd.AddressLine1,
cyd.AddressLine2,
cyd.TelephoneLine,
cyd.FaxLine,
o1.FromVoucNbr,
d.DocDate,
cd.CustomerName,
cd.StreetAddress,
cd.City,
cd.Country,
dt.DetDescr,
o2.CCType,
dd.FreeDescr,
dd.NetAmount,
dd.VATAmount,
vt.VATDescr,
o2.Description,
vt.VATRate
};
var结果=
来自cy in_dc公司
在cy.CompanyId上的_dc.CompanyVersions中加入cyv等于cyv.CompanyId
将cyd加入到cyv上的_dc.CompanyDetails中。CompanyVersionId等于cyd.Id
将cd加入到cy.CompanyId等于cd.CompanyId的客户详细信息中
在cd上的文档中加入d。CustomerId等于d.CustomerId
将di加入到d.DocumentId上的_dc.DocumentItems等于di.DocumentId
将dd加入到dc文档详细信息中
var results =
from cy in _dc.Companies
join cyv in _dc.CompanyVersions on cy.CompanyId equals cyv.CompanyId
join cyd in _dc.CompanyDetails on cyv.CompanyVersionId equals cyd.Id
join cd in _dc.CustomerDetails on cy.CompanyId equals cd.CompanyId
join d in _dc.Documents on cd.CustomerId equals d.CustomerId
join di in _dc.DocumentItems on d.DocumentId equals di.DocumentId
join dd in _dc.DocumentDetails on di.DocDetailsId equals
dd.DocumentDetailsId
join dt in _dc.DetailTypes on dd.detailTypeId equals dt.detailTypeId
join vt in _dc.Vats on dt.VATCode equals vt.VATCode
join v in _dc.Vouchers on dd.DocumentDetailsId equals v.DocDetailID into
other1
from o1 in other1.DefaultIfEmpty()
join cc in _dc.CreditCards on o1.CCType equals cc.CCType into other2
from o2 in other2.DefaultIfEmpty()
where (d.DocTypeId == 1 || d.DocTypeId == 2)
&& (d.DocDate >= date)
&& (d.DocDate < date.AddDays(1))
&& (d.CompanyVersionId == cyv.CompanyVersionId)
&& (d.isDeleted == false || d.isDeleted == null)
orderby d.DocNumber ascending
select new
{
d.DocumentId,
d.DocNumber,
d.AutUser,
d.GrossAmount,
d.DocTypeId,
cyd.Name,
cyd.AddressLine1,
cyd.AddressLine2,
cyd.TelephoneLine,
cyd.FaxLine,
o1.FromVoucNbr,
d.DocDate,
cd.CustomerName,
cd.StreetAddress,
cd.City,
cd.Country,
dt.DetDescr,
o2.CCType,
dd.FreeDescr,
dd.NetAmount,
dd.VATAmount,
vt.VATDescr,
o2.Description,
vt.VATRate
};