【发布时间】:2010-10-25 13:13:12
【问题描述】:
我将三个对象(splistitemcollection)连接在一起,效果很好,但我遇到的问题是合同对象和客户对象之间存在一对多的关系。在加入期间,我只需要为每个合同对象获取第一个客户对象。
这是我得到的
(合同)(客户) 12345 约翰·史密斯 12345 简·史密斯 67890霍华德琼斯 67890 玛丽琼斯这就是我想要的 12345(只是其中一位客户,简或约翰)
这是我当前使用的代码。
var joinedResults = from SPListItem contracts in _contractList
join SPListItem customers in _customerList
on contracts["ContractNumber"] equals customers["ContractNumber"]
join SPListItem loans in _loanList
on contracts["ContractNumber"] equals loans["Contract_x0020_Number"]
into l from loans in l.DefaultIfEmpty()
select new MergedData(contracts, customers, loans);
在 SQL 中,我会在我的联接中定义的子查询中定义一个 select top 子句,我只是无法理解我的新手 linq 大脑的语法。
最终结果
var joinedResults = from SPListItem contracts in _contractList
join SPListItem customers in
// Derived subset
(from SPListItem customers in _customerList
group customers by customers["ContractNumber"] into groupedCustomers
select groupedCustomers.FirstOrDefault()
) on contracts["ContractNumber"] equals customers["ContractNumber"]
join SPListItem loans in _loanList
on contracts["ContractNumber"] equals loans["Contract_x0020_Number"] into l
from loans in l.DefaultIfEmpty()
select new MergedData(contracts, customers, loans);
【问题讨论】:
-
感谢大家的帮助。使用组概念,我能够得到我需要的结果。我实际上将 teh 组从单独的语句移动到查询中的内联。这是结果