假设我有以下代码(简化)使用带有左外连接的 linq to sql:public class Program{ public static void Main() { IList<Payment> paymentsList = new List<Payment>() { new Payment() { ID = 1, Amount = 4 } , new Payment() { ID = 2, Amount = -11 } , new Payment() { ID = 3, Amount = 11 } }; IList<Allocation> allocationList = new List<Allocation>() { new Allocation(){ OriginalID = 1, ReversalID=2}, new Allocation(){ OriginalID = 2, ReversalID=3} }; var summaryPayments = from s in paymentsList join alloc in allocationList on s.ID equals alloc.OriginalID into allocOrg from po in allocOrg.DefaultIfEmpty() join allocRev in allocationList on s.ID equals allocRev.ReversalID into allocRevs from pr in allocRevs.DefaultIfEmpty() select new Payment{Amount=s.Amount, ReversalId = (pr != null ? pr.ReversalID : 0)}; foreach (var obj in summaryPayments) { Console.WriteLine("{0} - {1}", obj.Amount,obj.ReversalId); } }}public class Payment{ public int ID { get; set; } public decimal Amount { get; set; } public int? ReversalId { get; set; } }public class Allocation{ public int OriginalID {get;set;} public int ReversalID { get; set; } }
1 回答
慕妹3146593
TA贡献1820条经验 获得超9个赞
试试下面的代码
var summaryPayments = (from s in paymentsList
join alloc in allocationList on s.ID equals alloc.OriginalID into allocOrg
from po in allocOrg.DefaultIfEmpty()
join allocRev in allocationList on s.ID equals allocRev.ReversalID into allocRevs
from pr in allocRevs.DefaultIfEmpty()
select new { s, pr }).Select(x => { x.s.ReversalId = (x.pr != null ? x.pr.ReversalID : 0); return x.s; });
- 1 回答
- 0 关注
- 140 浏览
添加回答
举报
0/150
提交
取消