Если вы хотите добавить все записи от AftList2
до lstAux
, вы должны определить AftList2
как IEnumerable <> с элементами типа DetalleCita
(достаточно указать IEnumerable<DetalleCita>
, чтобы использовать в качестве параметра AddRange()
на List<DetalleCita>
). Например, как это:
var AftList2 = GridData2.Values.Where(r => r != null).Cast<DetalleCita>();
И затем вы можете добавить все его элементы в lstAux
:
lstAux.AddRange(AftList2);
Пояснение:
Я думаю, вы неправильно понимаете, что делает метод расширения ToList()
. создает новый список из IEnumerable<T>
, и его результат не связан с исходным IEnumerable<T>
, к которому он применяется.
Вот почему вы просто ничего не делаете, пытаясь сделать list.ToList().AddRange(...)
- вы копируете список в (еще один недавно созданный ToList()
) список, обновляете его и затем в основном выбрасываете его (потому что вы даже не делаете что-то вроде list2 = var1.ToList()
, оригинал var1
остается неизменным после этого !!! вы, скорее всего, захотите сохранить результат ToList()
, если вы его вызываете).
Также вам обычно не нужно преобразовывать один список в другой список, ToList()
полезен, когда вам нужен список (List<T>
), но имеет IEnumerable<T>
(который не индексируется, и вам может потребоваться быстрый доступ по индексу или ленивые вычисления, но вам нужны все результаты, рассчитанные в это время - обе ситуации могут возникнуть при попытке использовать результат LINQ для запроса объектов, например: IEnumerable<int> ints = from i in anotherInts where i > 20 select i;
- даже если anotherInts
было List<int>
результатом запроса ints
нельзя преобразовать в List<int>
, потому что это не список, а реализация IEnumerable<int>
. В этом случае вы можете использовать ToList()
для получения списка в любом случае: List<int> ints = (from i in anotherInts where i > 20 select i).ToList();
).
UPDATE:
Если вы действительно имеете в виду семантику объединения (например, для {1, 2} и {1, 3} union будет что-то вроде {1, 2, 3}, без дублирования равных элементов из двух коллекции) рассмотрите возможность перехода на HashSet<T>
(это, скорее всего, доступно в вашей ситуации, потому что вы используете C # 3.0, и я полагаю, у вас есть последняя .NET Framework) или использовать метод расширения Union()
вместо AddRange
(я не думаю, что это лучше, чем первое решение, и будьте осторожны, потому что оно работает больше как ToList()
- a.Union(b)
, возвращает новую коллекцию и НЕ обновляет a
или b
).