Элементы группы и слияния в одном списке - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть список отелей, у каждого отеля есть Id, возможно дублирование одного и того же отеля (с тем же идентификатором), но с разными номерами. Я хочу объединить дубликаты элементов в один с LINQ, заменив все атрибуты, кроме комнат, которые необходимо добавить в другой список. Я пытаюсь достичь его с помощью foreach:

private List<Domain.CheckRateDomain.Hotels> BuildResponseResult(List<Hotels> hotelsList)
{
    var listResult = new List<Hotels>();
    var hotelListAux = new List<Hotels>(hotelsList);

    foreach (var hotel in hotelsList)
    {
        hotelListAux.Remove(hotel);

        foreach (var hotelAux in hotelListAux)
        {
            if (hotel.Id == hotelAux.Id)
            {
                hotel.Rooms.AddRange(hotelAux.Rooms);
                listResult.Add(hotel);
            }
            else
            {
                listResult.Add(hotel);
                listResult.Add(hotelAux);
            }
        }
    }

    return hotelsList;
}

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Использовать GroupBy:

hotelsList.GroupBy(h => h.Id)
     .Select(g => new Hotel
          {
              Id = g.Key,
              Rooms = g.SelectMany(h => h.Rooms).ToList()
          }).ToList();
0 голосов
/ 07 апреля 2020

Попробуйте следующее:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var listResult = new List<Hotels>();

            var results = listResult.GroupBy(x => x.id).Select(x => new {
                hotel = x.FirstOrDefault(),
                cotisations = x.Select(y => y.rooms).ToList()
            }).ToList();

            //then set original rooms to null
            foreach(var h in results)
            {
                h.hotel.rooms = null;
            }
        }
    }
    public class Hotels :
    {
        public int id { get; set; }
        public List<Room> rooms { get; set;}

    }
    public class Room
    {

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...