0

我在删除 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)
}

我只想在 pumpNonActive 中获得 1 个结果(结果 = Pump 2)。任何人都可以帮助我:/

4

3 回答 3

1

实施.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();
    }
}
于 2013-03-26T11:22:34.447 回答
1

您可以覆盖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"},
};
于 2013-03-26T11:23:23.823 回答
0

实施

public class Pump: IEquatable<Pump>
{
     public bool Equals(Pump other)
     {
          ...
     }
}
于 2013-03-26T11:19:08.410 回答