C# 扩展枢轴函数
我成功地使用了这个示例代码C# 扩展枢轴函数,c#,linq,pivot,C#,Linq,Pivot,我成功地使用了这个示例代码 public static Dictionary<TKey1, Dictionary<TKey2, TValue>> PivotLinq<TSource, TKey1, TKey2, TValue>( this IEnumerable<TSource> source, Func<TSource, TKey1> key1Selector, Func<TSource, TKey2> ke
public static Dictionary<TKey1, Dictionary<TKey2, TValue>> PivotLinq<TSource, TKey1, TKey2, TValue>(
this IEnumerable<TSource> source, Func<TSource, TKey1> key1Selector, Func<TSource, TKey2> key2Selector,
Func<IEnumerable<TSource>, TValue> aggregate)
{
return source.GroupBy(key1Selector).Select(
x => new
{
X = x.Key,
Y = x.GroupBy(key2Selector).Select(
z => new
{
Z = z.Key,
V = aggregate(z)
}
).ToDictionary(e => e.Z, o => o.V)
}
).ToDictionary(e => e.X, o => o.Y);
}
现在我将其扩展如下:
public static Dictionary<TKey1, Dictionary<TKey2,Dictionary<TKey3,Dictionary<TKey4,TValue>>>> PivotLinq<TSource, TKey1, TKey2,TKey3,TKey4, TValue>(
this IEnumerable<TSource> source, Func<TSource, TKey1> key1Selector, Func<TSource, TKey2> key2Selector, Func<TSource, TKey3> key3Selector, Func<TSource, TKey4> key4Selector,
Func<IEnumerable<TSource>, TValue> aggregate)
{
return source.GroupBy(key1Selector).Select(
x => new
{
X = x.Key,
Y = x.GroupBy(key2Selector).Select(
z => new
{
Z = z.Key,
V =z.GroupBy(key3Selector).Select( // aggregate(z)
w => new
{
W=w.Key ,
B = w.GroupBy(key4Selector).Select(
c=> new
{
C=c.Key ,
D=aggregate(c)
}).ToDictionary(e=>e.C, o=>o.D)
}
).ToDictionary(e=>e.W, o=>o.B)
}
).ToDictionary(e=>e.Z , o=>o.V )
}).ToDictionary(e=>e.X,o=>o.Y);
}
但是,聚合函数不会产生期望的结果。有人能告诉我哪里出了问题吗?产生了什么不希望的结果?只需添加一些测试用例和数据,看看你得到了什么或没有,这是最简单的。当我应用pivot时,聚合值是空的。但是,当我在使用linqpad的pivot之前查看数据集时,要聚合的列的值就在那里