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:

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?
source
share