Linq 运算符聚合匹配值并对它们进行加权
Linq operator to aggregate matching value and weight them
工作代码。
double[] confirmingList = new double[] { -3, -2, -1 };
var Tdb = rDatas
.Select(d => new
{
TScore = (new List<double> {
d.T15Min, // Let this count .2
d.T30Min, // .25
d.T65Min, // .3
d.T130Min, // .4
d.T195Min, // .5
d.TDaily, // .8
d.TWeekly // 1
}).Count(c => confirmingList.Contains(c))
我想要的是通过时间框架匹配和加权 属性 进行聚合。是否有一些 Linq Kung Fu 可以做到这一点?我是否应该传递一些 class 以乘以 属性 名称的权重?我怀疑聚合运算符中有些东西允许这样做?
在通过修改或加权聚合值时,无法真正找到显示逻辑运算匹配的内容。
使用索引 Select
方法,您可以将每个时间范围与其权重相匹配,当它应该被计算时:
double[] confirmingList = new double[] { -3, -2, -1 };
var weights = new[] { 0.2, 0.25, 0.3, 0.4, 0.5, 0.8, 1.0 };
var Tdb = rDatas
.Select(d => new {
TScore = (new[] {
d.T15Min, // Let this count .2
d.T30Min, // .25
d.T65Min, // .3
d.T130Min, // .4
d.T195Min, // .5
d.TDaily, // .8
d.TWeekly // 1
}).Select((t,i) => confirmingList.Contains(t) ? weights[i] : 0).Sum()
});
工作代码。
double[] confirmingList = new double[] { -3, -2, -1 };
var Tdb = rDatas
.Select(d => new
{
TScore = (new List<double> {
d.T15Min, // Let this count .2
d.T30Min, // .25
d.T65Min, // .3
d.T130Min, // .4
d.T195Min, // .5
d.TDaily, // .8
d.TWeekly // 1
}).Count(c => confirmingList.Contains(c))
我想要的是通过时间框架匹配和加权 属性 进行聚合。是否有一些 Linq Kung Fu 可以做到这一点?我是否应该传递一些 class 以乘以 属性 名称的权重?我怀疑聚合运算符中有些东西允许这样做?
在通过修改或加权聚合值时,无法真正找到显示逻辑运算匹配的内容。
使用索引 Select
方法,您可以将每个时间范围与其权重相匹配,当它应该被计算时:
double[] confirmingList = new double[] { -3, -2, -1 };
var weights = new[] { 0.2, 0.25, 0.3, 0.4, 0.5, 0.8, 1.0 };
var Tdb = rDatas
.Select(d => new {
TScore = (new[] {
d.T15Min, // Let this count .2
d.T30Min, // .25
d.T65Min, // .3
d.T130Min, // .4
d.T195Min, // .5
d.TDaily, // .8
d.TWeekly // 1
}).Select((t,i) => confirmingList.Contains(t) ? weights[i] : 0).Sum()
});