2016-04-08 32 views
0

Aşağıdaki gibi bir modelim var.İki genel listeyi bir araya getirme

public class ProcessData 
{ 
    public Int32 ProcessDataId { get; set; } 
    public string routenumber { get; set; } 
    public string representative { get; set; } 
    public string Ischecked { get; set; } 
} 

Verilerin

A List<ProcessData> objMainData ile doldurulur - Bu ana veri veri

yaklaşık 40 satır demek olan B. List<ProcessData> Manipulated data - Bu, bazı değişiklik ile, ana verileri yer alır. 2 alan için veri değiştirdiğimde 10 satırlık

B'yi almak ve A ile birleştirmek istiyorum. A'nın B'de yaptığım değişiklikler ile tüm verilere sahip olmasını istiyorum. Bu mümkün mü?

Bu, aşağıdaki verilerimin benim olduğunu varsayarsak. Bunu nasıl bir araya getirebilirim?

 public class Collectiondata 
      { 
       public List<ProcessData> Objmaindata() 
       { 
        List<ProcessData> objMain = new List<ProcessData>(); 
        objMain.Add(new ProcessData() { ProcessDataId=1,routenumber="2001",representative="James",Ischecked=""}); 
        objMain.Add(new ProcessData() { ProcessDataId=2,routenumber="2002",representative="John",Ischecked=""}); 
        objMain.Add(new ProcessData() { ProcessDataId=3,routenumber="2003",representative="",Ischecked=""}); 
        objMain.Add(new ProcessData() { ProcessDataId=4,routenumber="2004",representative="Bassey",Ischecked=""}); 
        objMain.Add(new ProcessData() { ProcessDataId=5,routenumber="2005",representative="Adams",Ischecked="" }); 
        return objMain; 
       } 

       public List<ProcessData> ManipulatedData() 
       { 
        List<ProcessData> objMain = new List<ProcessData>(); 
        objMain.Add(new ProcessData() { ProcessDataId = 1, routenumber = "3001", representative = "Sumbo", Ischecked = "Y" }); 
        objMain.Add(new ProcessData() { ProcessDataId = 2, routenumber = "2002", representative = "Folabi", Ischecked = "Y" }); 
        objMain.Add(new ProcessData() { ProcessDataId = 3, routenumber = "3035", representative = "James", Ischecked = "Y" }); 
        return objMain; 
       } 


      } 
+0

'ProcessDataId' benzersiz bir tanıtıcıdır ve sınıfın bir Karşılaştırıcı var mı? –

+0

Evet ProcessDataId benzersiz tanımlayıcıdır. Bir karşılaştırıcı yoktur – user2320476

+0

Bunu, bir karşılaştırıcı ('IEqualityComparer ') ve bir linq '.Union()' deyimi kullanarak yapabilirsiniz. Kodu test etmek için bana bir dakika ver ve bir cevap ekleyeceğim. –

cevap

0

, IEqualityComparer<T>

public class ProcessDataComparer : IEqualityComparer<ProcessData> 
{ 
    public bool Equals(ProcessData x, ProcessData y) 
    { 
     return x.ProcessDataId.Equals(y.ProcessDataId); 
    } 
    public int GetHashCode(ProcessData obj) 
    { 
     return obj.ProcessDataId; 
    } 
} 

Sonra ilk birleştirilmiş liste içerecektir 2 listeleri

var mergedList = manipulatedData.Union(objMainData, new ProcessDataComparer()); 

birleştirmeye .Union() bir linq kullanabilirsiniz uygulayan sınıfınız için bir karşılaştırıcısı oluştur manipüleData öğelerinden sonra öğesindenöğesindeki öğelerden biri ile eşleşen ProcessDataId ürününe sahip olmayan öğeler. Artık siparişte olmadıklarından, yukarıdaki sorgunun sonuna bir .OrderBy(x => x.ProcessDataId) yan tümcesi eklemek isteyebileceğinizi unutmayın.

+0

Teşekkürler. Bir test verisi ekledim. Şimdi bunu nasıl bir araya getirebilirim. Bunu daha önce hiç kullanmadım. – user2320476

+0

Hangi bölümü anlamadınız? –

+0

Bunu verilerime nasıl bağlarım? – user2320476

İlgili konular