C# Linq Lambda元素计数

pkmbmrz7  于 2022-12-25  发布在  C#
关注(0)|答案(2)|浏览(185)

我对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"));

如果有人在LINQLAMBDA上打得更多,你可以帮我一把。

8zzbczxx

8zzbczxx1#

传递给Count()函数的 predicate 表达式的结果必须返回boolean,其中d.variables.Where()返回与条件匹配的元素列表。请使用Any()而不是Where()来检查记录是否存在。

var sobrevelocidad = _devices.Count(d => d.variables.Any(s => s.name == "Speed" && s.value.ToString() == "true"));

然而,在您的情况下,您希望检查列表中是否存在两个变量,以匹配并计数记录,这意味着为“Speed”变量和“Ignition”变量调用Any()

var count = _devices.Count(d => d.variables.Any(s => s.name == "Speed" && s.value > 5) && d.variables.Any(s => s.name = "Ignition" && s.value));
t30tvxxf

t30tvxxf2#

问题是Count方法需要一个返回布尔值的lambda表达式。
例如:

var sobrevelocidad = _devices.Count(d => 
    d.variables.Any(s => s.name == "Speed" && s.value >= 5) &&
    d.variables.Any(s => s.name == "Ignition" && s.value.ToString() == "true")
);

相关问题