Консолидация / объединение данных из двух списков IEnumerable в один - PullRequest
2 голосов
/ 26 января 2011

В моем приложении есть следующие доменные объекты:

 [Serializable]
    public class Supplier
    {
        public virtual string SupplierType { get; set; }
        public virtual string SupplierCode { get; set; }

        public virtual string Name { get; set; }
        public virtual string Description { get; set; }
        public virtual string Rating { get; set; }
        public virtual string WebsiteURL { get; set; }

        public virtual IList<Address> Address { get; set; }

    }

    [Serializable]
    public class CargoSupplier : Supplier
    {
        public virtual IList<Image> Images { get; set; }
        public virtual string OpeningTime { get; set; }
        public virtual string ClosingTime { get; set; }

        public virtual IList<Product> Products { get; set; }
    }

Мне нужно перейти в два отдельных репозитория для получения описательного контента (из базы данных) и цены (из внешнего веб-сервиса), и у меня будет два отдельных перечисления, заполненныхс данными (описательный контент и цены):

IEnumerable<CargoSupplier> cargoSuppliers_Pricing
IEnumerable<CargoSupplier> cargoSuppliers_Content

cargoSuppliers_Content будет заполнять все поля данными, КРОМЕ IList<Product>, а в CargoSuppliers_Pricing будет SupplierType, SupplierCode and IList<Product> заполнено данными.Ключом будет комбинация «SupplierType» и «SupplierCode».

Теперь мне нужно объединить контент и цены в одно перечисление, чтобы я мог вернуть IEnumerable<CargoSupplier> cargoSuppliers своим контроллерам и представлениям.Каков наилучший способ объединить эти два списка в один?

Ответы [ 4 ]

4 голосов
/ 26 января 2011

Вы ищете Union или я что-то упустил в вопросе?

var mergedList = list1.Union(list2).ToList();

не забудьте импортировать System.Linq пространство имен

3 голосов
/ 26 января 2011

Похоже, вам не нужен один список, который просто содержит все элементы в любом списке - похоже, вам нужно объединить отдельные элементы. Примерно так:

var query = from pricing in cargoSuppliers_Pricing
            join content in cargoSuppliers_Content
            on pricing.SupplierCode equals content.SupplierCode
            select new CargoSupplier
            {
                // Copy properties from both objects here
            };

В части «выберите» вы бы взяли части цены из «цены» и части контента из «контента», создав объект CargoSupplier, который имеет оба бита.

Это то, что вы были после?

3 голосов
/ 26 января 2011

Использование Enumerable.Concat:

Объединяет две последовательности.

Пример:

var result = cargoSuppliers_Content.Concat(cargoSuppliers_Pricing);
0 голосов
/ 26 января 2011

Видел метод расширения Union ()? Это должно делать то, что вы после

IEnumerable<CargoSupplier> allCargoSuppliers = cargoSuppliers_Pricing.Union(cargoSuppliers_Content);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...