在 2sxc 数字字段中使用 average()
Using average() in 2sxc numeric field
@inherits ToSic.Sxc.Dnn.RazorComponent
@using System.Linq;
@{
var Measures = AsList(App.Data["Measures"]);
}
<p>@Measures.Where(... something ...).Select(s => s.Time).Max()</p>
<p>@Measures.Where(... something ...).Select(s => s.Time).Min()</p>
<p>@Measures.Where(... something ...).Select(s => s.Time).Average()</p>
最大和最小工作量。平均 returns:
'System.Collections.Generic.IEnumerable<dynamic>' does not contain a definition for 'Average' and the best extension method overload 'System.Linq.Queryable.Average(System.Linq.IQueryable<int>)' has some invalid arguments
时间是一个数字字段。
我想我错过了某种演员表?
Min 和 Max 可能非常通用,因为即使是字符串也可以有 min/max.
平均确实需要确定它是一个数字。我猜这应该可以解决您正在做的事情
<p>@Measures.Where(... something ...).Select(s => (double)s.Time).Average()</p>
如果 s.Time
为空,这可能会造成麻烦,在这种情况下,您可能需要类似
的内容
<p>@Measures.Where(... something ...).Select(s => s.Time as double? ?? 0).Average()</p>
没试过,但应该可以。强制转换为 double?
意味着可以为 nullable-double,然后添加 ?? 0
应该确保所有空值都是 0.
结束于
var GetMeasures = Measures.Where(u => u.Category.CatName == c.CatName && !u.Time.Equals(null));
var getTimes = GetMeasures.Select(s => (double)s.Time);
if (getTimes.Count() > 0) {
<p>@getTimes.Max()</p>
<p>@getTimes.Min()</p>
<p>@getTimes.Average()</tdp
}
@inherits ToSic.Sxc.Dnn.RazorComponent
@using System.Linq;
@{
var Measures = AsList(App.Data["Measures"]);
}
<p>@Measures.Where(... something ...).Select(s => s.Time).Max()</p>
<p>@Measures.Where(... something ...).Select(s => s.Time).Min()</p>
<p>@Measures.Where(... something ...).Select(s => s.Time).Average()</p>
最大和最小工作量。平均 returns:
'System.Collections.Generic.IEnumerable<dynamic>' does not contain a definition for 'Average' and the best extension method overload 'System.Linq.Queryable.Average(System.Linq.IQueryable<int>)' has some invalid arguments
时间是一个数字字段。 我想我错过了某种演员表?
Min 和 Max 可能非常通用,因为即使是字符串也可以有 min/max.
平均确实需要确定它是一个数字。我猜这应该可以解决您正在做的事情
<p>@Measures.Where(... something ...).Select(s => (double)s.Time).Average()</p>
如果 s.Time
为空,这可能会造成麻烦,在这种情况下,您可能需要类似
<p>@Measures.Where(... something ...).Select(s => s.Time as double? ?? 0).Average()</p>
没试过,但应该可以。强制转换为 double?
意味着可以为 nullable-double,然后添加 ?? 0
应该确保所有空值都是 0.
结束于
var GetMeasures = Measures.Where(u => u.Category.CatName == c.CatName && !u.Time.Equals(null));
var getTimes = GetMeasures.Select(s => (double)s.Time);
if (getTimes.Count() > 0) {
<p>@getTimes.Max()</p>
<p>@getTimes.Min()</p>
<p>@getTimes.Average()</tdp
}