C# 为anonymous提供一个名称,稍后在LINQ中调用
我有一个int[]数组={34,65,3,65,3,2,68,8,4,2}。我想把这个数组分成5个一组,然后找出每个子组的平均值。这个语法(隐式地)声明了一个数组,该数组的类型是由C# 为anonymous提供一个名称,稍后在LINQ中调用,c#,linq,C#,Linq,我有一个int[]数组={34,65,3,65,3,2,68,8,4,2}。我想把这个数组分成5个一组,然后找出每个子组的平均值。这个语法(隐式地)声明了一个数组,该数组的类型是由Avg()方法返回的: new [] { Avrg = g.Avg() } // if g.Avg() returns int, it will be int[] 如果要声明匿名类型的数组,必须执行以下操作: new[] { new { Avrg = g.Avg() } } 编辑: 根据您的编辑,此代码将数组分成
Avg()
方法返回的:
new [] { Avrg = g.Avg() } // if g.Avg() returns int, it will be int[]
如果要声明匿名类型的数组,必须执行以下操作:
new[] { new { Avrg = g.Avg() } }
编辑:
根据您的编辑,此代码将数组分成5个元素的组,并计算它们的平均值:
int[] array = { 34, 65, 3, 65, 3, 2, 68, 8, 4, 2 };
var avgGroups = from x in Enumerable.Range(0, array.Length)
group x by (x / 5) into g
select new { Avrg = g.Average(x => array[x]) };
此语法(隐式)声明Avg()
方法返回的类型的数组:
new [] { Avrg = g.Avg() } // if g.Avg() returns int, it will be int[]
如果要声明匿名类型的数组,必须执行以下操作:
new[] { new { Avrg = g.Avg() } }
编辑:
根据您的编辑,此代码将数组分成5个元素的组,并计算它们的平均值:
int[] array = { 34, 65, 3, 65, 3, 2, 68, 8, 4, 2 };
var avgGroups = from x in Enumerable.Range(0, array.Length)
group x by (x / 5) into g
select new { Avrg = g.Average(x => array[x]) };
你不需要给它起个名字;您正在创建的对象的类型为
IEnumerable<typeof(g.Avg)>
IEnumerable
因此,您可以通过该对象进行枚举以获得g.Avg()的值。您不需要给它命名;您正在创建的对象的类型为
IEnumerable<typeof(g.Avg)>
IEnumerable
因此,您可以通过该对象进行枚举以获得g.Avg()的值。您可能希望将类型存储在数组中。为了这个你需要像这样
var v = from xyz in new [] { new {Avg = g.Avg()} }
select xyz;
而是这样,
var v = from xyz in new [] { g.Avg() }
select new {Avg = xyz};
可能您想在数组中存储类型。为了这个你需要像这样
var v = from xyz in new [] { new {Avg = g.Avg()} }
select xyz;
而是这样,
var v = from xyz in new [] { g.Avg() }
select new {Avg = xyz};
代码的其余部分是什么样子的?在from行之前给g.Avg()一个名称,这样var Avrg=g.Avg();从新[]{Avrg}中的xyz选择xyz;你想做什么还不清楚。请进一步解释。如果它没有编译,这表明它涉及到编译器错误-所以请包括这一点。您还没有提到什么是
g
,或者您试图将此查询分配给什么。基本上,提供更多的上下文。请阅读谢谢大家。我已经更新了我的问题,剩下的代码是什么样子的?在from行之前给g.Avg()一个名称,这样var Avrg=g.Avg()怎么样;从新[]{Avrg}中的xyz选择xyz;你想做什么还不清楚。请进一步解释。如果它没有编译,这表明它涉及到编译器错误-所以请包括这一点。您还没有提到什么是g
,或者您试图将此查询分配给什么。基本上,提供更多的上下文。请阅读谢谢大家。我已经更新了我的问题