2015-05-04 110 views
0

所以我有兩個使用linq的列表。將兩個列表數據合併爲單個列表C#

List<One> one= A.Common 
       .Join(B.Common, 
       a => a.ID, 
       b=> b.ID, 
       (a, b) => new One 
       { 
        ID = b.PID, 
        Name = b.PCName, 
        LastName = a.LName 
       }).ToList(); 

List<One> two = (from c in D.Options 
       select new One 
       { 
        MainName = c.mName 
       }).ToList(); 

List<One> sn = one.Concat(two).ToList(); 

我將這兩個列表拼接在一起。但是,當我調試我得到MainName爲sn list爲空。

如何從單個列表中的兩個列表中獲取數據?

+0

您是否檢查過在'two'中MainName獲得的值?你的代碼對我來說看起來很好。 –

+0

第一個集合,你沒有設置MainName ...可以嗎? – dmyoko

+0

@MairajAhmad我有一個類 – Richa

回答

3

這是你如何做到這一點:

var sn = one.Zip(two, (x, y) => new One{ 
    ID = x.ID, 
    Name = x.Name, 
    LastName = x.LastName, 
    MainName = y.MainName 
}); 
+0

我得到了問題,但不知道如何使用LINQ來解決它:) – Shaharyar

+0

這是減少原始項目的計數 – Richa

+0

我然而,重要的是要確保這兩個列表的組織得當......這些元素是有序的,並且沒有人缺失(除非你想丟棄缺失的元素)。 – dmyoko

0

您希望爲所有列表值分配的MainName屬性在列表ONE

從上面碼級聯將加入兩個列表和MainName將未設置爲列表中的一個元素。

one.Concat(two) 

上面的代碼只會將兩個列表連接到一個列表元素。

0

您可以使用LINQ ConcatToList方法:

var mergedList = YourFirstList.Concat(YourSecondList) 
        .Concat(YourThirdList) 
        .ToList(); 

編輯:

one.Concat(two).Select(g => g.Aggregate((p1,p2) => new One 
{ 
    ID = p1.ID, 
    Name = p1.PCName, 
    LastName = p1.LName, 
    MainName = p2.mName 
})); 

更有效的方式來做到這一點 - 上面將基本循環所有條目,創建動態大小的緩衝區河

var mergedList = new List<One>(YourFirstList.Count + 
           YourSecondList.Count + 
           YourThirdList.Count); 
mergedList.AddRange(YourFirstList); 
mergedList.AddRange(YourSecondList); 
mergedList.AddRange(YourThirdList); 

的AddRange是special-casedICollection<T>效率。

可以使用Zip方法。

one.Zip(two,(o1, o2) => new One() 
{ 
    ID = o1.ID, 
    Name = o1.PCName, 
    LastName = o1.LName, 
    MainName = o2.mName 
});