在 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
}