[英]Difference Between Two Lists in EF6 using except doesn't work
我試圖計算兩個列表之間的差異,我的列表類型具有以下結構:
public partial class Assistance
{
public int Id { get; set; }
public string AssistanceName { get; set; }
public string AssistanceTell { get; set; }
}
這是我的查詢:
List<Assistance> assistanceWithoutExpert;
AssistanceJurorRepository assistanceJurorRepository = new AssistanceJurorRepository();
List<Assistance> assistancesWithExpert = assistanceJurorRepository.FindBy(i => i.User.Permission == "Assistance").Select(i => i.Assistance).ToList();
List<Assistance> AllAssitance = GetAll().ToList();
assistanceWithoutExpert = AllAssitance.Except(assistancesWithExpert).ToList();
return assistanceWithoutExpert;
正如你可以看到我有持有召集所有assitances列表AllAssitance
並持有assitances已經列表expert
稱為assistancesWithExpert
我需要計算assistanceWithoutExpert
。所以,但執行的結果后的所有記錄在AllAssitance
為什么呢?
最好的祝福
public class AssistanceComparer: IEqualityComparer<Assistance>
{
public bool Equals(Assistance x, Assistance y)
{
return x.ID == y.ID;
}
public int GetHashCode(Assistance assistance)
{
return assistance.ID.GetHashCode();
}
}
用法:
assistanceWithoutExpert = AllAssitance.Except(assistancesWithExpert, new AssistanceComparer()).ToList();
使用默認的相等比較器完成比較。 從MSDN :
通過使用默認的相等比較器比較值來產生兩個序列的集合差異。
您需要通過覆蓋GetHashCode
和Equals
來定義自定義比較。
默認的相等比較器Default用於比較實現IEqualityComparer通用接口的類型的值。 要比較自定義數據類型,您需要實現此接口並為該類型提供自己的GetHashCode和Equals方法。
簡而言之,如果您想通過Id
屬性比較實例,則需要在Assistence類中添加以下代碼。
public override int GetHashCode() {
return Id.GetHashCode();
}
public override bool Equals(obj otherInstance) {
return (otherInstance is Assistence) && ((Assistence)otherInstance).Id == Id;
}
但是,如果您要在不唯一的某個字段上進行比較,則需要注意警告。 看到這個鏈接 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.