我对LINQ
有一个问题,那就是我不知道如何解决在一定条件下计数元素的问题。
说明:
在List<Dispositivo> _devices
类型的对象中有以下元素集
{
root: [{
dispositivo: 413,
variables: [{
name: "Ignition",
value: false,
type: "Boolean",
unit: "boolean",
utc: "2021-05-06T21:06:36.0000000Z"
}, {
name: "Speed",
value: 0,
type: "Double",
unit: "M/S",
utc: "2021-05-06T21:06:54.0000000Z"
}
]
}, {
dispositivo: 418,
variables: [{
name: "Ignition",
value: true,
type: "Boolean",
unit: "boolean",
utc: "2021-05-06T21:08:19.0000000Z"
}, {
name: "Speed",
value: 19.3888888888889,
type: "Double",
unit: "M/S",
utc: "2021-05-06T21:08:19.0000000Z"
}
]
}, {
dispositivo: 419,
variables: [{
name: "Ignition",
value: true,
type: "Boolean",
unit: "boolean",
utc: "2021-03-22T20:20:22.0000000Z"
},{
name: "Speed",
value: 0,
type: "Double",
unit: "M/S",
utc: "2021-05-04T16:19:06.0000000Z"
}
]
}
]
}
类别:
class Variables
{
string name,
object value,
type string,
unit string,
utc string
}
class Dispositivos
{
int device ,
Lis<Variables> variables
}
我写了下面的代码来尝试在下面的条件下计算它的变量:
计数"点火"变量设置为"真"且"速度"变量大于或等于5的器械。
我写了这个,但它对我不起作用,它给了我版本中的错误。
var sobrevelocidad = _devices.Count(d => d.variables.Where(s => s.name == "Speed" && s.value.ToString() == "true"));
如果有人在LINQ
和LAMBDA
上打得更多,你可以帮我一把。
2条答案
按热度按时间8zzbczxx1#
传递给
Count()
函数的 predicate 表达式的结果必须返回boolean
,其中d.variables.Where()
返回与条件匹配的元素列表。请使用Any()
而不是Where()
来检查记录是否存在。然而,在您的情况下,您希望检查列表中是否存在两个变量,以匹配并计数记录,这意味着为“Speed”变量和“Ignition”变量调用
Any()
。t30tvxxf2#
问题是Count方法需要一个返回布尔值的lambda表达式。
例如: