Czy mogę podzielić IEnumerable<T>
na dwa IEnumerable<T>
przy użyciu LINQ i tylko pojedyncze zapytanie/LINQ?Czy można podzielić IEnumerable na dwa według kryteriów boolowskich bez dwóch kwerend?
Chcę uniknąć wielokrotnego powtarzania przez IEnumerable<T>
. Na przykład, czy możliwe jest połączenie dwóch ostatnich instrukcji poniżej, aby wszystkie wartości były wykonywane tylko raz?
IEnumerable<MyObj> allValues = ...
List<MyObj> trues = allValues.Where(val => val.SomeProp).ToList();
List<MyObj> falses = allValues.Where(val => !val.SomeProp).ToList();
elegancki! Zawsze mogę użyć groups.ContainsKey() lub groups.TryGetValue() do obsługi przypadku, w którym brakuje klucza. – SFun28
Powoduje to awarię, jeśli jeden klawisz (true lub false) nigdy nie jest używany. na przykład jeśli SomeProp ma zawsze wartość true, grupy [false] ulegną awarii z wyjątkiem "Podany klucz nie występuje w słowniku" – buffjape
GroupBy użyj sortowania, aby utworzyć grupy. Nie wiem, czy lepiej trzymać ze skanem dwa razy, niż robić coś w tym rodzaju. – ejmarino