2015-05-21 6 views
5

में डुप्लिकेट संदर्भों को हटाने से मुझे अपनी सूची में डुप्लिकेट संदर्भों को हटाने में समस्या है।सूची सी #

मैं अपने वर्ग SaveMongo कि इस

public class SaveMongo 
{ 
    public ObjectId _id { get; set; } 
    public DateTime date { get; set; } 
    public Guid ClientId { get; set; } 
    public List<TypeOfSave> ListType = new List<TypeOfSave>(); 
    public List<ObjectId> ListObjSave = new List<ObjectId>(); 
    public SaveMongo() 
    { } 
} 

तरह लग रहा है जब भी मैं अपनी सूची मैं निम्नलिखित कोड

public static fctName(BsonDocument doc) 
{ 
    toReturn.Add(AddingSaveMongo(doc.GetValue("_id"))); 
} 

public static SaveMongo AddingSaveMongo(BsonValue ObjValue) 
{ 
    foreach (SaveMongo doc in SpeCollection.FindAll()) 
    { 
     foreach (var id in doc.ListObjSave) 
     { 
      if (id == ObjValue) 
       return (doc); 
     } 
    } 
    return (null); 
} 
उपयोग करने के लिए एक तत्व जोड़ना चाहते हैं के साथ इस सूची

List<SaveMongo> toReturn 

है

हालांकि, मुझे कभी-कभी डुप्लीकेट संदर्भ मिलते हैं। मैंने इस

toReturn = toReturn.Distinct().ToList(); 

का उपयोग करने का प्रयास करने का प्रयास किया। बिना सफलता के।

मैं भी सफलता नहीं मिली फिर भी इस

if (!toReturn.Contains(AddingSaveMongo(doc.GetValue("_id")))) 
    toReturn.Add(AddingSaveMongo(doc.GetValue("_id"))); 

करने की कोशिश की। लेकिन जब भी मैं अपनी सूची में संदर्भ प्रिंट मैं उन परिणाम enter image description here

enter image description here

मैं यहाँ क्या याद आ रही है, ताकि मैं अभी भी अपने सूची में डुप्लिकेट संदर्भ हो मिल सकता है?

+0

वैकल्पिक रूप से, अगर आप ' 3.5 .netfw> 3.5 का उपयोग कर, आप हैशसेट का उपयोग कर सकते हैं। तो आपको डुप्लिकेट के बारे में चिंता करने की ज़रूरत नहीं होगी। – cup

+2

'हैशसेट ' को अभी भी उन वस्तुओं की तुलना करने के बारे में जानने की आवश्यकता होगी। –

उत्तर

6

उपयोग समूहीकरण: इस उदाहरण उनके Id के आधार पर वस्तुओं तुलना

toReturn = (from e in toReturn 
      group e by e._id into g 
      select g.First()).ToList(); 

इसके अलावा, आप कर सकते हैं दो (या अधिक) खेतों से समूह:

toReturn = (from e in toReturn 
      // group by ID and Date component 
      group e by new { e._id, e.date.Date } into g 
      select g.First()).ToList(); 
8

वर्तमान में, Distinctobject.Equals, जो संदर्भ समानता कर रहा है का उपयोग कर अपने वस्तुओं मिलान किया जाता है। अन्य मानदंडों के आधार पर वस्तुओं से मेल खाने के लिए इसे बताने का एक तरीका IEquatable<SaveMongo> लागू करना है।

public class SaveMongo : IEquatable<SaveMongo> 
{ 
    public ObjectId _id { get; set; } 
    public DateTime date { get; set; } 
    public Guid ClientId { get; set; } 
    public List<TypeOfSave> ListType = new List<TypeOfSave>(); 
    public List<ObjectId> ListObjSave = new List<ObjectId>(); 

    public override bool Equals(object obj) 
    { 
     if (ReferenceEquals(null, obj)) return false; 
     if (ReferenceEquals(this, obj)) return true; 
     if (obj.GetType() != this.GetType()) return false; 
     return Equals((SaveMongo) obj); 
    } 

    public override int GetHashCode() 
    { 
     return _id.GetHashCode(); 
    } 

    public bool Equals(SaveMongo other) 
    { 
     return _id.Equals(other._id); 
    } 
} 
संबंधित मुद्दे