删除重复的对象后,比较表2列出

问题描述:

我有一个问题,除去2列表删除重复的对象后,比较表2列出

public class Pump 
{ 
    public int PumpID { get; set; } 
    public string PumpName { get; set; } 
    public string LogicalNumber { get; set; } 
} 

public void LoadPump() 
{ 
    var pumps = _pumpRepository.GetAll(); // 2 Pump 
    var pumpsActive = _pumpRepository.GetAllActive(); // 1 Pump Active (Pump 1) 
    //i try like this 
    List<Pump> pumpsNonActive = pumps.Except(pumpsActive).ToList(); // Result 2 
    //if like this 
    List<Pump> pumpsNonActive = pumpsActive.Except(pumps).ToList(); // Result 1 (Pump 1) 
} 

我想只得到1结果pumpsNonActive(结果=泵2)重复的对象。任何人都可以帮助我:/

+2

你'Pump'类具有覆盖'Equals'和'GetHashCode'方法。 – MarcinJuraszek 2013-03-26 11:16:02

+0

您的存储库如何实现?你如何管理DbContext? – 2013-03-26 11:20:35

您可以覆盖Equals或者你可以尝试以下方法:

List<Pump> pumpsNonActive = pumps.Where(r => !pumpsActive 
              .Any(t => t.PumpID == r.PumpID)) 
            .ToList(); 

这个工作对以下数据集:

List<Pump> pumps = new List<Pump>() 
{ 
    new Pump() { PumpID = 1, LogicalNumber = "SomeName", PumpName="PumpName1"}, 
    new Pump() {PumpID = 2, LogicalNumber = "Number", PumpName = "PumpName2"}, 
    new Pump(){PumpID = 3, LogicalNumber = "Number", PumpName = "PumpName3"}, 
}; 

List<Pump> pumpsActive= new List<Pump>() 
{ 
    new Pump() { PumpID = 1, LogicalNumber = "2", PumpName="3"}, 
}; 
+0

感谢@Habib的工作! :) 我改变它是这样的: List lists = pumps.Where(p => activePumps.All(ap => ap.PumpID!= p.PumpID))。ToList(); – yovierayz 2013-03-26 11:29:44

+0

@yovierayz,也会工作 – Habib 2013-03-26 11:30:24

+0

@yovierayz,不客气 – Habib 2013-03-26 11:30:59

Imeplement

public class Pump: IEquatable<Pump> 
{ 
    public bool Equals(Pump other) 
    { 
      ... 
    } 
} 

实施.Equals(object).GetHashCode()

public class Pump 
{ 
    public int PumpID { get; set; } 
    public string PumpName { get; set; } 
    public string LogicalNumber { get; set; } 

    public override bool Equals(object o) 
    { 
     var casted = o as Pump; 
     if (casted == null) 
      return false; 

     return PumpID == o.PumpID; 
    } 

    public override int GetHashCode() 
    { 
     return PumpID.GetHashCode(); 
    } 
} 
+0

感谢它的作品:) 实现:var lists = pumps.Where(p =>!activePumps.All(p.Equals))。ToList(); – yovierayz 2013-03-26 11:39:54