2013-06-24 30 views
4

我有一些數據,我需要根據一些條件來劃分,即:在單個查詢中基於條件(「where」)的分區數據?

var trues = from item in items where MyCondition(item, blah) select item; 
var falses = from item in items where !MyCondition(item, blah) select item; 

有一個更清潔的方式來做到這一點在一個單一的查詢,並得到兩個結果回來,這樣我就不必重複自己(並最終迭代數據兩次)像上面一樣?

+1

您可以組:

您可以使用ToLookup做到這一點。 –

+0

避免經典foreach循環的任何特定原因? –

+1

@OndrejSvejdar:它不夠乾淨。如果我走這條路線,我可能不會首先使用LINQ ... – Mehrdad

回答

4

如果你不想迭代數據兩次,你將不得不創建一個包含真值和假值的LINQ查詢,並在其中指明屬於哪個組。由條件

var combined = items.ToLookup(x => MyCondition(x, blah)); 
var trues = combined[true]; 
var falses = combined[false]; 
+0

如果它們中的任何一個都不符合條件,會發生什麼? – Mehrdad

+2

'trues'和'falses'將是空的enumerables。如果查找不包含具有指定鍵的任何項目,則它不會引發異常 - 它將返回一個空的enumerable。 –

+0

Oooh好的,那正是我在找的,謝謝! +1 – Mehrdad