Linq分组查询

时间:2010-04-19 19:13:40

标签: c# asp.net linq email

public class Mailing
{
    public string To { get; set; }
    public string AttachmentPath { get; set; }
    public int AttachmentCount { get; set; }
}

给出这种结构我有一个IList<Mailing> mailingList,其中To有重复,而AttachmentPath每个都是唯一的。

我需要向mailingList发送电子邮件,其中每个唯一To都有多个附件(即AttachmentPath s)。

这部分有效 - 我可以获得附件计数并迭代并添加附件,但我觉得这很难看。我还需要为每组附件限制一封电子邮件,以下内容完全中断。

var investorMailings = (from m in mailingList
                       group m by new
                               {
                                   m.GroupBy,
                                   m.To
                               }
                           into g
                           select new DistintInvestorMailing
                               {
                                   To = g.Key.To,
                                   AttachmentCount = g.Count()
                               }).ToList();

任何想法?

1 个答案:

答案 0 :(得分:2)

var groupedMailings = mailingList.GroupBy(g => g.To);
var investorMailings = groupedMailings.Select(
    g => new 
    { 
        To = g.Key,
        Attachments = g.Select(k => k.AttachmentPath),
        Count = g.Sum(j => j.AttachmentCount) 
    }
);

应生成具有以下属性的IEnumerable匿名类型:

  • .To 要发送到
  • 的地址
  • .Count 要发送的附件数量
  • 。附件引用AttachmentPath的IEnumerable字符串

注意:是的,这可以变成1个linq语句,但为了清晰起见,我将其分为两个