Linq如何只在满足条件时才返回?

时间:2013-05-15 00:36:16

标签: linq

我想遍历一个对象列表并检查一个布尔值,直到所有都为真,然后返回。

这对Linq来说可能吗?

换句话说:

  

< obj {1,true},obj {1,false},obj {1,false},obj {1,   假}   >

但是bool正在被其他东西更新,我想检查bool直到所有都是真的然后返回控制。

如何处理linq?

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用.Any()返回一个布尔值,表示您的集合中的任何值都为false。

while( yourCollection.Any(q => q.BooleanVariable == false)) { }

这将一直运行,直到所有变量都设置为true

答案 1 :(得分:0)

由于您要在不断检查时更新集合,因此需要将检查逻辑和逻辑分开,将列表更新为不同的线程。

AutoResetEvent waitEvent = new AutoResetEvent(false);

ThreadPool.QueueUserWorkitem
(
    work =>
    {
        while(true)
        {
            Thread.Sleep(TimeSpan.FromSeconds(1));
            if(!yourCollection.Any(x => x.BooleanVariable == false))
            {
                waitEvent.Set();
                break;
            }
        }
    }
);

//alternatively, you could already have another thread running that is updating the list
new Thread(
{
    //do some stuff that updates the list here
}).Start();

waitEvent.WaitOne();

//continue doing stuff when all items in list are true