合并两个列表并从列表A中减去列表B的值

Edu*_*elo 1 .net c# linq performance entity-framework

我有以下列表,我想从列表中减去Count列表的属性BA

这是样本列表.请注意,我实际上使用的是Linq-To-Entities:

清单A.

List<Leave> defaultLeaves = new List<Leave>()
{
  new Leave{ Id = 1 , Count = 7},
  new Leave{ Id = 2 , Count = 7},
  new Leave{ Id = 3 , Count = 7},
  new Leave{ Id = 4 , Count = 3}
};
Run Code Online (Sandbox Code Playgroud)

清单B.

List<Leave> usedLeaves = new List<Leave>()
 {
    new Leave{ Id = 1 , Count = 1},
    new Leave{ Id = 2 , Count = 2}        
  };
Run Code Online (Sandbox Code Playgroud)

我希望列表的输出是这样A的,B通过相应的列表计数从列表中减去计数Ids

List<Leave> availableLeaves = new List<Leave>()
{
  new Leave{ Id = 1 , Count = 6},
  new Leave{ Id = 2 , Count = 5},
  new Leave{ Id = 3 , Count = 7},
  new Leave{ Id = 4 , Count = 3}
 };
Run Code Online (Sandbox Code Playgroud)

这有可能使用linq方法???

Iva*_*oev 5

IMO这是一个完美的候选人left outer join:

var availableLeaves = 
    (from d in defaultLeaves
     join u in usedLeaves on d.Id equals u.Id into match
     from u in match.DefaultIfEmpty()
     select new Leave
     {
         Id = d.Id,
         Count = d.Count - (u != null ? u.Count : 0)
     }).ToList();
Run Code Online (Sandbox Code Playgroud)