2015-04-30 5 views
0

У меня есть два ILists в моем, которые получают значения из отдельных таблиц в базе данных. Эти таблицы содержат одинаковые столбцы и значения, но по другим причинам клиент нуждается в них, хранящихся в отдельных таблицах.Как объединить два ILists вместе

private IList<MeterReadingDto> _meterReadings; 
private IList<PseudoReadingDto> _pseudoReading; 
public IList<MeterReadingDto> MeterReadings 
    { 
     get 
     { 
      return _meterReadings != null ? _meterReadings.OrderByDescending(x => x.ReadDate).ToList() : null; 
     } 
     set { _meterReadings = value; } 
    } 

    public IList<PseudoReadingDto> PseudoReadings 
    { 
     get 
     { 
      return _pseudoReading != null ? _pseudoReading.OrderByDescending(x => x.ReadDate).ToList() : null; 
     } 
     set { _pseudoReading = value; } 
    } 

Как вы можете видеть, что они оба получают результаты и хранить их, но теперь мне нужно слить/профсоюз этого список, так что они могут быть отображены в одной таблице. Любые идеи о том, как это сделать

+0

Итак, почему вы используете два разных класса для одной и той же структуры данных из двух таблиц? –

+0

Обратите внимание, что если они имеют одинаковые столбцы, вы захотите, чтобы они реализовали общий интерфейс для упрощения слияния с Concat или их общий общий базовый класс. –

ответ

0

Рассмотрите возможность использования расширения метода IEnumerable Union.

ПРИМЕЧАНИЕ. Использование этой операции приведет к тому, что дублирующие элементы между двумя коллекциями будут удалены из результата.

+0

Союз откажется от любых элементов, которые имеют два ИЛИТ. –

+1

О, ладно. Я видел эту заметку: метод Concat отличается от метода Union, потому что метод Concat возвращает все элементы во входных последовательностях, включая дубликаты, тогда как Union возвращает только уникальные значения. Спасибо за разъяснения. –

1

Ну, если вы можете извлечь интерфейс (или когда-либо базовый класс) для MeterReadingDto и PseudoReadingDto, чем вы могли бы объединить их в IEnumerable или IList этого.

т.е.

public IEnumerable<BaseReadingDto> AllReadings { 
    get{ 
    return MeterReadings.Concat(PseudoReadings); 
    } 
} 
0

Вы должны быть в состоянии рассматривать как PseudoReadingDto и MeterReadingDto как тот же тип объекта. Вы можете посмотреть анонимные типы, но я предлагаю использовать оба интерфейса с одним и тем же интерфейсом (например, IReadingDto). Затем вы можете создать новый List<IReadingDto> и объединить списки.

Если у них один и тот же тип, вы можете использовать List.AddRange() для добавления списков вместе.

+0

Использование AddRange особенно эффективно по сравнению с Concat, если вы заранее знаете размер финального списка http://stackoverflow.com/a/4488073/141172. –

 Смежные вопросы

  • Нет связанных вопросов^_^