2015-05-04 4 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 как null в sn list.

Как получить данные из обоих списков в одном списке?

+0

Вы проверили, какое значение вы получаете для MainName в 'two'? Ваш код выглядит хорошо для меня. –

+0

Первая коллекция, вы не устанавливаете MainName ... Все в порядке? – dmyoko

+0

@MairajAhmad У меня есть свойство MainName в классе 1 – 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

I t, тем не менее, чтобы убедиться, что два списка правильно организованы ... это элементы в порядке, и нет никого (если вы не захотите отказаться от отсутствующих). – dmyoko

0

Вы хотите, чтобы свойство MainName было назначено для всех значений списка в Список ONE?

Как показано выше, объединение конкатенаций объединяется в два списка, а имя MainName не будет установлено для списка элементов.

one.Concat(two) 

Вышеуказанная строка просто объединяет оба списка в один элемент списка.

0

Вы можете использовать LINQ Concat и ToList методы:

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

Edit:

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-cased для ICollection<T> для эффективности.

Вы можете использовать метод Zip.

one.Zip(two,(o1, o2) => new One() 
{ 
    ID = o1.ID, 
    Name = o1.PCName, 
    LastName = o1.LName, 
    MainName = o2.mName 
}); 
Смежные вопросы