我想知道如何通过按月分组来计算Linq的问题。
以下是我的示例数据:
Code CodeName Color Month
11111 One Red 1
11111 One Red 1
11111 One Red 2
22222 Two Green 2
33333 Three Yellow 3
44444 Four Blue 4
44444 Four Blue 4
55555 Five White 5
我希望看到这样的结果:
Code CodeName Color Count(Mont1) Month2 Month3 Month4 Month5
11111 one red 2 1 0 0 0
22222 two Green 0 1 0 0 0
33333 three Yellow 0 0 1 0 0
44444 four Blue 0 0 0 2 0
55555 five White 0 0 0 0 1
答案 0 :(得分:0)
这是一个产生所需结果的例子
它的核心是:
Code
属性Color
属性MonthX
属性设置为具有给定月份标识符的内部分组中的对象的计数(按颜色的代码项目)这具体处理问题中提供的5个月值,您可以将您喜欢的所有月份值拆分到结果对象上的自己的属性中,或者将其构建为月份索引与计数的字典,如果其他值为必需的。
public enum Number
{
One = 11111,
Two = 22222,
Three = 33333,
Four = 44444,
Five = 55555
}
public class Data
{
public Number Code { get; set; }
public string CodeName { get { return Enum.GetName(typeof(Number), Code); } }
public ConsoleColor Color { get; set; }
public int Month { get; set; }
}
public class Result
{
public Number Code { get; set; }
public string CodeName { get { return Enum.GetName(typeof(Number), Code); } }
public ConsoleColor Color { get; set; }
public int Month1 { get; set; }
public int Month2 { get; set; }
public int Month3 { get; set; }
public int Month4 { get; set; }
public int Month5 { get; set; }
}
class Program
{
static void Main(string[] args)
{
var items = new Data[]
{
new Data{Code = Number.One, Color = ConsoleColor.Red, Month = 1},
new Data{Code = Number.One, Color = ConsoleColor.Red, Month = 1},
new Data{Code = Number.One, Color = ConsoleColor.Red, Month = 2},
new Data{Code = Number.Two, Color = ConsoleColor.Green, Month = 2},
new Data{Code = Number.Three, Color = ConsoleColor.Yellow, Month = 3},
new Data{Code = Number.Four, Color = ConsoleColor.Blue, Month = 4},
new Data{Code = Number.Four, Color = ConsoleColor.Blue, Month = 4},
new Data{Code = Number.Five, Color = ConsoleColor.White, Month = 5},
};
var results = items.GroupBy(x => x.Code).Select(
x => x.GroupBy(y => y.Color)
.Select(z => new Result
{
Code = x.Key,
Color = z.Key,
Month1 = z.Count(q => q.Month == 1),
Month2 = z.Count(q => q.Month == 2),
Month3 = z.Count(q => q.Month == 3),
Month4 = z.Count(q => q.Month == 4),
Month5 = z.Count(q => q.Month == 5),
}).ToList());
var resultList = results.ToList();
}
}