whorsfall
asked on
C# Linq complex grouping question.
Hi,
I have some procedural .NET core code I would like to convert to Linq - or at least get as close as I can.
From the code below have "group_list" generated via linq.
Thanks,
Ward.
I have some procedural .NET core code I would like to convert to Linq - or at least get as close as I can.
From the code below have "group_list" generated via linq.
Thanks,
Ward.
using System;
using System.Collections.Generic;
using System.Linq;
namespace Linq_Test1
{
class Email_Message
{
public string From;
public string From_Address;
public string Subject;
public DateTime TimeRecieved;
public string Body;
public string Message_ID;
}
class Email_Group
{
public string From;
public string From_Address;
public List<String> Message_ID_List = new List<string>();
public String Combined_Body;
}
class Program
{
static void Main(string[] args)
{
List<Email_Message> message_list = new List<Email_Message>();
List<Email_Group> group_list = new List<Email_Group>();
Email_Message message;
message = new Email_Message();
message.From = "A"; message.From_Address = "a@test.com"; message.Subject = "Subject 1";
message.TimeRecieved = DateTime.Now; message.Body = "Body A-1"; message.Message_ID = Guid.NewGuid().ToString();
message_list.Add(message);
message = new Email_Message();
message.From = "A"; message.From_Address = "a@test.com"; message.Subject = "Subject 2";
message.TimeRecieved = DateTime.Now; message.Body = "Body A-2"; message.Message_ID = Guid.NewGuid().ToString();
message_list.Add(message);
message = new Email_Message();
message.From = "B"; message.From_Address = "b@test.com"; message.Subject = "Subject 3";
message.TimeRecieved = DateTime.Now; message.Body = "Body B-1"; message.Message_ID = Guid.NewGuid().ToString();
message_list.Add(message);
message = new Email_Message();
message.From = "B"; message.From_Address = "b@test.com"; message.Subject = "Subject 4";
message.TimeRecieved = DateTime.Now; message.Body = "Body B-2"; message.Message_ID = Guid.NewGuid().ToString();
message_list.Add(message);
var grouped_messages = message_list.GroupBy(x => new { x.From, x.From_Address }).ToList();
// Can the code below be converted to Linq ??
// i.e. group_list produced via Linq.
foreach (var group in grouped_messages)
{
Email_Group email_Group = new Email_Group();
email_Group.From = group.Key.From;
email_Group.From_Address = group.Key.From_Address;
email_Group.Combined_Body = "\r\nCombined Body:\r\n---\r\n\r\n";
foreach (var email_message in group)
{
email_Group.Combined_Body += email_message.Body + "\r\n---r\n";
email_Group.Message_ID_List.Add(email_message.Message_ID);
}
email_Group.Combined_Body += "\r\n===\r\n";
group_list.Add(email_Group);
}
// -------------------------------------------------
}
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
it_saige - big thanks great help
Thanks,
Ward