How to group and break items in a list by inline code?

I work with a database. I want to receive all messages and group them based on RoomId(1 conversation contains a message with the same RoomId).

I tried this:

public class Message
{
    public string SenderId { get; set; }

    public string ReceiverId { get; set; }

    public string RoomId { get; set; }
}

class Program
{
    static void Main()
    {
        var list = new List<Message>
            {
                new Message { SenderId = "Sender1", ReceiverId = "Receiver1", RoomId = "Room2" },
                new Message { SenderId = "Sender1", ReceiverId = "Receiver1", RoomId = "Room1" },
                new Message { SenderId = "Sender1", ReceiverId = "Receiver1", RoomId = "Room3" },
                new Message { SenderId = "Sender1", ReceiverId = "Receiver1", RoomId = "Room1" },
                new Message { SenderId = "Sender1", ReceiverId = "Receiver1", RoomId = "Room2" },
                new Message { SenderId = "Sender1", ReceiverId = "Receiver1", RoomId = "Room3" }
            };

        var group_list = list.GroupBy(x => x.RoomId);

        var output_list = new List<List<Message>>();

        foreach (var item in group_list)
        {
            output_list.Add(item.ToList());
        }

        foreach (var item in output_list)
        {
            Console.WriteLine($"Conversation {output_list.IndexOf(item) + 1}");

            foreach (var msg in item)
            {
                Console.WriteLine($"SenderId: {msg.SenderId}\tReceiverId: {msg.ReceiverId}\tRoomId: {msg.RoomId}");
            }

            Console.WriteLine();
        }
    }
}

Conclusion:

Output snapshot

I want to embed a part:

foreach (var item in group_list)
{
    output_list.Add(item.ToList());
}

at

var group_list = list.GroupBy(x => x.RoomId).[...what next?...];

How can i do this?

+4
source share
1 answer

After GroupByyou select a group IEnumerable<Message>, so you can use ToList:

List<List<Message>> output_list = list
    .GroupBy(x => x.RoomId)
    .Select(g => g.ToList())
    .ToList();
+5
source

Source: https://habr.com/ru/post/1693986/


All Articles