LINQ 分组到同一收件人

LINQ Grouping to same recipient

我想将邮件列表分组到他们的收件人。

lstMails 列表是 List<MailModel>

MailModel 有一个 属性 这是 string[] 到.

例如,此列表中可能有 5 封邮件。

我想获取每个邮件收件人的列表。

例如

最好是 ForEach(List<MailModel> list in lstMails.GroupBy(-----))

我不知道我一直在谷歌搜索,但问题是如果我 Group By 它只检查数组是否相同,基本上如果 .To 是 ["reci1", "reci"] == ["reci1", "reci"] 它基本上不会“复制”它们

如果我没有提供足够的信息,我很抱歉,我在这里编辑..

您可以获取所有收件人,然后区分他们,然后过滤 lstMails 用户。

类似于:

lstMails
  .SelectMany(mail => mail.To)
  .Distinct()
  .Select(user => lstMails.Where(mail => mail.To.Contains(user))

我相信这会给出预期的结果:

var mailsByRecipient = (from m in lstMails
                  from recipient in m.To
                  select new { m, recipient } into s
                  group s by s.recipient into g
                  select new { recipient = g.Key, mails = g.Select(x => x.m) })
                  .ToList();

它 returns 每个唯一电子邮件收件人的列表,其中包含 MailModel 个列表。

它通过首先创建每个收件人的笛卡尔积及其各自的MailModel(进入s),并使用它按收件人分组(进入g)来实现这一点。

最后一个 select 纯粹是为了美观,创建了一个包含属性 recipientmails 的新对象。我发现直接使用 IGrouping<TKey, TElement> 很奇怪。