删除重复的对象后,比较表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)重复的对象。任何人都可以帮助我:/
答
您可以覆盖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"},
};
答
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
你'Pump'类具有覆盖'Equals'和'GetHashCode'方法。 – MarcinJuraszek 2013-03-26 11:16:02
您的存储库如何实现?你如何管理DbContext? – 2013-03-26 11:20:35