資料去重Distinct,IEqualityComparer,IEquatable
阿新 • • 發佈:2020-09-01
很多情況下我們查詢資料需要去重重複資料,下面就記錄三個去重的方法。
Distinct
最基本的去重形式,直接查詢出資料後使用Distinct方法進行欄位去重。
var strList = new List<string>() { "1","2","1"}; var resultList = strList.Distinct();//結果1,2
IEqualityComparer
此方法擴充套件介面可以實現類級別的去重,比如我想實現其中一個表中的某些資料根據其中一個欄位去重,這個時候我們就可以使用IEqualityComparer介面,首先需要對做去重的類實現介面IEqualityComparer
// public class Model_DistIn: IEqualityComparer<T_mode> { public bool Equals(T_modex, T_modey) { if (x == null || y == null) return false; if (x.orderId == y.orderId) return true; else return false; } public int GetHashCode(T_modeobj) { if (obj == null) return 0; else return obj.orderId.GetHashCode(); } }
然後我們就可以在查詢資料的地方使用此類進行對比:虛擬碼
var resultList = db.Entities .OrderByDescending(b => b.addTime) .ToList() .Distinct(new Model_DistIn()) .Select(b => new ComoboData { text = b.orderNum, value = b.orderId, }).ToList();
IEquatable
此介面方法跟IEqualityComparer寫法很類似,都是用作比較確定某個物件與當前例項在結構上是否相等。但是這個一般使用在自定義物件比較欄位。
而IEqualityComparer大多用作去重性質上。
例如:
public class Model_DistIn: IEquatable<Model_DistIn> { public string orderId { get; set; } public string orderName { get; set; } public bool Equals(Model_DistIn x, Model_DistIn y) { if (x == null || y == null) return false; if (x.orderId == y.orderId) return true; else return false; } public bool Equals(Model_DistIn obj) { if (obj == null) return false; else return true; } }
使用:
Model_DistIn m1 = new Model_DistIn(); Model_DistIn m2 = new Model_DistIn(); bool isSame = m1.Equals(m2);