using System.Collections.Generic;
public static void Main()
List<SqsMessage> messages = new List<SqsMessage>
new SqsMessage("Product1"),
new SqsMessage("Product2", "Media1", "Media2"),
new SqsMessage("Product3"),
new SqsMessage("Product1", "Media3", "Media4"),
new SqsMessage("Product3"),
new SqsMessage("Product1", "Media5", "Media6"),
new SqsMessage("Product1", "Media3")
Console.WriteLine("Message count: " + messages.Count);
var productGroups = messages.GroupBy(m => m.CoreId);
Console.WriteLine("Message group count: " + productGroups.Count());
foreach (var group in productGroups)
Console.WriteLine("Group for " + group.Key);
foreach (var message in group)
if (message.MediaIds == null)
Console.WriteLine("No MediaIds found");
Console.WriteLine("MediaIds: " + string.Join(", ", message.MediaIds));
var distinctMediaIds = group.Where(m => m.MediaIds != null).SelectMany(m => m.MediaIds).Distinct().ToList();
if (distinctMediaIds.Count > 0)
Console.WriteLine("Distinct MediaIds: " + string.Join(", ", distinctMediaIds));
public SqsMessage(string coreId)
public SqsMessage(string coreId, params string[] mediaIds)
MediaIds = new List<string>(mediaIds);
public string CoreId { get; set; }
public List<string> MediaIds { get; set; }