【发布时间】:2016-06-10 20:39:45
【问题描述】:
我有下面的查询,它在带有左外连接的 sqllite 中工作
select * from customer cu
inner join contract cnt on cu.customerId = cnt.customerid
inner join address addy on cu.addressid = addy.addressId
inner join csrAssoc cassc on cu.customerid = cassc.customerId
left outer join CustomerServiceRepresentative csrr on cassc.csrid = csrr.customerservicerepresentativeId
inner join customerServiceManager csmm on cassc.csmid = csmm.customerservicemanagerId
where cu.customernumber = '22222234'
我希望能够在下面的 linq 查询中在这一行上应用左外连接
join csrr in objCsrCustServRep.AsEnumerable() on cassc.CsrId equals
csrr.CustomerServiceRepresentativeId
VisitRepData = (from cu in objCustomer.AsEnumerable()
join cnt in objContract.AsEnumerable() on cu.customerId equals cnt.customerId
join addy in objAddress.AsEnumerable() on cu.addressId equals addy.addressId
join cassc in objCsrAssoc.AsEnumerable() on cu.customerId equals cassc.CustomerId
join csrr in objCsrCustServRep.AsEnumerable() on cassc.CsrId equals
csrr.CustomerServiceRepresentativeId
join csmm in objCustServMan on cassc.CsmId.ToString() equals csmm.customerServiceManagerId
where cu.CustomerNumber == (customernbr)
如何在 linq 查询中进行左外连接?
这是我调整并运行代码后的评论。还添加了其他部分。我得到的只是对象未设置为对象的实例。
var VisitRepData = from cu in objCustomer.AsEnumerable()
join cnt in objContract.AsEnumerable() on cu.customerId equals cnt.customerId
join addy in objAddress.AsEnumerable() on cu.addressId equals addy.addressId
join cassc in objCsrAssoc.AsEnumerable() on cu.customerId equals cassc.CustomerId
join csrr in objCsrCustServRep.AsEnumerable() on cassc.CsrId equals
csrr.CustomerServiceRepresentativeId into temp
from tempItem in temp.DefaultIfEmpty()
join csmm in objCustServMan on cassc.CsmId.ToString() equals csmm.customerServiceManagerId
where cu.CustomerNumber == (customernbr)
select new
{
cu.customerId,
cu.CustomerNumber,
cu.customerName,
cu.dateActive,
cnt.contractExpirationDate,
addy.street,
addy.street2,
addy.city,
addy.state,
addy.zipcode,
cu.EMail,
cu.phoneNo,
cu.faxNumber,
csmm.customerServiceManagerName,
tempItem.CustomerServiceRepresentativeName,
};
foreach (var item in VisitRepData)
{
var one = item.customerId;
var two = item.CustomerNumber;
}
【问题讨论】:
-
您的链接中没有任何内容被标记为答案。
-
216 票还不足以让您阅读答案吗?没有考虑到这个问题非常基础并且缺乏基础研究 - join clause (C# Reference)、How to: Perform Left Outer Joins (C# Programming Guide) 等。
-
有趣。您发送的示例的链接描述了与集合的外部连接,即两个不同的集合。我的例子对你来说看起来像一个集合吗?你的评论很粗鲁。
-
无论 sequence 类型如何(
IEnumerable<T>或IQueryable<T>),查询语法模式都是相同的。与其发布 cmets,不如简单地尝试一下。我真的不明白这有什么意义。无论如何,查看更新后的帖子,您是否忘记了left outer join包含null右侧元素,因此必须有人检查null以避免NRE。此外,AsEnumerable()将导致将所有相关表加载到内存中。
标签: linq linq-to-sql