使用linq C#检查列表中除最后一项以外的条件

时间:2018-08-17 05:34:01

标签: c# linq

我有一个包含

的列表
List<decimal> number= new List<decimal>();
        number.Add(1);
        number.Add(0);
        number.Add(1);

除了使用LINQ的最后一个条目/列表节点之外,需要检查数字列表是否包含大于0的任何值

测试用例 1个 1个 0 =>假

0 0 1 =>真

我尝试过类似的事情

number.Where(s => s > 0).Skip(number.Count).Any() 

将返回一个布尔值。但是这一行代码始终返回false。

4 个答案:

答案 0 :(得分:1)

您可以通过仅考虑要处理的(number.Count-1)个值来跳过最后一个值,而不是从原始列表中删除值。例如。

public function handle_request() {
    if ( ! $this->is_data_writable() ) {
        return;
    }
    if ( ! $this->user_has_permissions() ) {
        return;
    }
    if ( 'active' != $this->object->status ) {
        return;
    }

    // do the stuff
}

答案 1 :(得分:0)

据我从“检查数字列表是否包含大于0的值(使用LINQ的最后一个条目/列表节点除外)”中所了解的,您不想检查最后一个值,因此只需将其从列表中删除并检查其他项目:

List<decimal> number= new List<decimal>();
    number.Add(1);
    number.Add(0);
    number.Add(1);

    number.RemoveAt(number.Count - 1);
    var exists = number.Any(x => x > 0);

或者如果您只想检查最后一个元素:

    number.Take(number.Count-1).Any(x => x > 0).Dump();

答案 2 :(得分:0)

跳过将跳过序列中的对象数目,而不是指定索引处的对象数目。 在这里,您将跳过序列中的所有对象,并询问是否存在任何对象。因此它总是返回false(假设示例中的变量defaultdata是变量号的错字)。

尝试一下。

var res = number.Where((num, index) => index != number.Count - 1 && num > 0).Any();

注意:由于我不是StackOverFlow的新手,因此我没有足够的声誉点可以发表评论。让我知道这是否回答了您的问题。

答案 3 :(得分:0)

如果您使用ID为“ System.Interactive”的NuGet Microsoft的交互式扩展,则可以执行以下操作:

var result = number.SkipLast(1).Where(x => x > 0).Any();