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个值。
答案 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
可以显示您分组的键。 Distinct
是GroupBy
的一部分,因此您不需要它。