过滤和分组.NET列表中的项目<>

时间:2014-03-18 09:30:55

标签: c# ilist

List<MailingList> myGroup = lst.GroupBy(t => new {t.userId, t.userName,t.email,t.reportTypeId})
                             .Select(g => new MailingList
                             {
                               userId = g.Key.userId,
                               Acrynom = g.SelectMany(t => t.Acrynom).ToArray(),
                               userName = g.Key.userName,
                               email = g.Key.email,
                               reportTypeId = g.Key.reportTypeId
                             }).ToList();

foreach (var mailingList in myGroup.Distinct())
{
   StringBuilder AcrynomsList1 = new StringBuilder();
   foreach (var item in mailingList.Acrynom)
   {
      if (Acrynoms.Length > 0)
      {
         Acrynoms.Append(", ");
      }
      AcrynomsList1.Append(item);
   }
}

我想要实现的是通过reportTypeId过滤和分组myGroup。 reportTypeId可以是1或2,所以我想要一个变量StringBuilder AcrynomsList1,其中reportTypeId = 1,然后是另一个变量StringBuilder AcrynomsList2,其中reportTypeId = 2。

我当前的StringBuilder varibale AcrynomsList1具有所有reportTypeId 1&amp; 2个值。

2 个答案:

答案 0 :(得分:0)

这可以给你你想要的东西:

var list =  lst.GroupBy(x => x.reportTypeId)
            .Select(x => new 
                     { 
                         reportTypeId = x.Key, 
                         Acronyms = x.SelectMany(t => t.Acrynom).ToArray()
                     }).ToList();

var acronymList1 = string.Join(", ", list[0].Acronyms);
var acronymList2 = string.Join(", ", list[1].Acronyms);

答案 1 :(得分:0)

您可以直接将其分组到string,而无需使用StringBuilder

class Program
{
    static void Main(string[] args)
    {
        var list = new List<MailingList>();
        var grouped = list
            .GroupBy(m => m.ReportTypeID)
            .Select(g => new
            {
                ReportTypeID = g.Key, 
                Items = string.Join(", ", g.Where(s => !string.IsNullOrEmpty(s.Acronym)).Select(m => m.Acronym))
            });
    }
}

class MailingList
{
    public int ReportTypeID { get; set; }
    public string Acronym { get; set; }
}

GroupBy extension method会为您返回MailingList的多个枚举,其中Key可以显示您分组的键。 DistinctGroupBy的一部分,因此您不需要它。