2010-06-16 3 views
4

Dire que j'ai LINQ simples extenstion:LINQ Comment forcer la requête à se matérialiser?

var filtered = data.Where(i => i.Count > 0); 

Je sais que ce ne sera pas évalué à moins que je commence à utiliser filtré-à-dire

foreach(DataItem i in filtered) ... 

Cependant je dois créer la version clonée de data et la libération données dès que possible. data peut être changé dans un autre thread, donc je veux obtenir un instantané immédiat de celui-ci.

Comment puis-je forcer filtered à être évalué immédiatement?

+1

Vous voulez dire que le contenu des données changera (éléments ajoutés/supprimés), ou que leurs propriétés seront modifiées? – R0MANARMY

Répondre

11
var filtered = data.Where(i => i.Count > 0).ToArray(); 

// or 

var filtered = data.Where(i => i.Count > 0).ToList(); 
+4

Dans quelles circonstances voudrais-je utiliser 'ToArray' par opposition à' ToList'? –

+0

IIRC 'ToList()' pourrait être plus rapide, donc vous n'utiliseriez 'ToArray()' que si vous en aviez vraiment besoin et array. –

7

Pour obtenir une liste remplie avec le résultat de l'énumération, appelez ToList(), c.-à-

var filtered = data.Where(i => i.Count > 0).ToList();