2011-12-15 2 views
0

У меня есть LINQ Запрос, возвращающий логическое значение.LINQ и Boolean Значения

 Boolean status=true; 
    var s = from p in msg where p.Type == false select false; 

им требуется установить статус от значения из запроса LINQ, который является булева как принять подход к этому

Если запрос LINQ имеет один false мне нужно возвращать фальшиво, как Boolean вот что мне нужно

+3

Нет, он возвращает возможно пустой список булевых элементов. В чем вопрос? – leppie

+1

Возможно, вам лучше объяснить, что вы пытаетесь сделать. – Ray

+1

Вы не можете. Linq для объектных запросов возвращает IEnumerable объектов. – TheBoyan

ответ

12

в момент assumign р имеет много сообще тогда s будет перечислимым с нулем множество falses. Вы можете рассмотреть другой оператор, как

!msg.Any(x=>x.Type=false) 

Или лучше благодаря Ray в комментариях:

msg.All(x => x.Type) 

Любой возвращает истину, если условие удовлетворяется всего на р. Все возвращает true, если условие выполняется во всех из них (и, таким образом, немедленно возвращается, если находит тот, который не соответствует).

В качестве альтернативы с кодом вы можете просто сделать:

status = s.Count()==0; 

Если s пуст (не falses в нем), то она возвращает истину, если она имеет один или более falses он будет возвращать ложь.

+1

'p.All (x => x.Type)' будет эквивалентно вашему утверждению (при условии, что Type является логическим). – Ray

+0

@Ray: возможно, но, предположительно, 'All' необходимо выполнить итерацию по всему массиву, тогда как' Any' остановится после нахождения первого действительного значения. Не может быть большой вещью, но если х имеет элементы gazillion, это может быть большой разницей. :) – Chris

+0

@ Крис: Все будут останавливаться в первый раз, когда он соберется без матча. Это логическая противоположность Any. – Rawling

0

Насколько я понимаю, все зависит от цели вашего status. Поскольку запрос LINQ вернет перечислимую коллекцию значений boolean, вам нужно будет определить, для чего должен быть назначен флаг status на основе этой коллекции.

В этом случае вы получите набор произвольного размера false. Поэтому, если вы хотите, чтобы status был true, если у вас нет значений false, вам просто нужно запросить размер коллекции. то есть:

status = s.Count() == 0; // Note: This is an example using the System.Linq namespace 
+0

Если запрос LINQ имеет один «false», мне нужно вернуть ложное значение, которое мне нужно – Sudantha

+0

В этом случае просто используйте: 'bool status =! P.Any (element =>! Element.Type); ' –

+0

@Slade: это осложняется тем, что Суданта говорит, что ему нужна * единственная * ложная ... Это может означать или не означать один или несколько фальши. – Chris

Смежные вопросы