检查IGrouping值是否包含结果

时间:2013-09-02 18:57:05

标签: linq igrouping

我有一个IGrouping结构

IGrouping<TierRequest,PingtreeNode>

PingtreeNode包含Response的属性,而Response又具有属性Result。

    public class PingtreeNode
    {
        public ResponseAdapter Response { get; set;}
        // ... more properties
    }

    public class ResponseAdapter
    {
        public int Result { get; set; }
        // ... more properties
    }

我想要做的是检查PingtreeNode是否包含任何结果== 2的节点。我知道答案包含SelectMany,但我很难获得正确的语法。

有人帮忙吗?

2 个答案:

答案 0 :(得分:0)

假设您希望PingTreeNode的集合满足您的条件,那么这应该可以解决问题:

var query = yourstruct.SelectMany(x=>x)
  .Where(x => x.Response.Result == 2);

答案 1 :(得分:0)

因为你必须检查

  

PingtreeNode是否包含任何Result == 2

的节点

我会使用Any方法:

IGrouping<TierRequest,PingtreeNode> source;

bool anyResultIs2 = source.SelectMany(x => x)
                          .Any(x => x.Response.Result == 2);

也可以在没有SelectMany的情况下完成:

bool anyResultId2 = source.Any(g => g.Any(x => x.Response.Result == 2));

因为SelectManyAny都是惰性的(一旦确定结果,只返回一个元素并结束执行),两种方法的性能应该相似。