过滤和分组. net列表中的项目
本文关键字:项目 列表 net 过滤 | 更新日期: 2023-09-27 17:50:41
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);
}
}
我想要实现的是过滤和组myGroup通过reportTypeId。reportTypeId可以是1或2,所以我想有一个变量StringBuilder AcrynomsList1,其中reportTypeId = 1,然后另一个变量StringBuilder AcrynomsList2,其中reportTypeId = 2。
我当前的StringBuilder变量AcrynomsList1具有所有的reportTypeId 1 &2的值。
这应该是你想要的:
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);
您可以直接将其分组为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扩展方法为您返回MailingList
的枚举数,其中有一个Key
来公开您分组的键。Distinct
是GroupBy
的一部分,所以你不需要它