我在C#中定义了以下DTO对象:
public class Record
{
public List<EventType> EventTypes { get; set; }
}
并且在列出&lt;记录和GT;填充而EventType定义为枚举
public Enum EventType {
UNLOCK = 1,
LOCK = 2
}
现在我想制作一份类似于记录列表的报告:
count Name
===== ======
3 UNLOCK
1 LOCK
...通过使用(很可能是LINQ group by)。制作此列表的首选方法是什么?我假设我必须制作另一个能够保存这些数据的DTO。
答案 0 :(得分:3)
根据您想要的结果数据类型,您可以使用以下任何一种:
var result = records.SelectMany(x => x.EventTypes)
.GroupBy(x => x)
.ToDictionary(x => x.Key, x => x.Count());
var result = records.SelectMany(x => x.EventTypes)
.GroupBy(x => x)
.Select(x => new { Name = x.Key, Count = x.Count());
var result = records.SelectMany(x => x.EventTypes)
.GroupBy(x => x)
.Select(x => new YourType(x.Key, x.Count()));
第一个将导致一个字典,其中事件类型是键,它在列表中出现的次数为值。
第二个将导致包含两个属性Name
和Count
的匿名类型的可枚举。
第三个将导致类型YourType
的可枚举,它将事件类型及其出现次数传递给其构造函数。