2010-10-04 6 views
2

J'ai une collection de vidéos qui ont un identificateur de type de champ qui me dit si une vidéo est une bande-annonce, un clip ou une interview.Linq sélectionner dans la liste où la propriété correspond à une condition

Je dois les mettre dans 3 collections séparées.

var trailers = myMediaObject.Videos.Where(type => type.TypeIdentifier == 1); 
var clips = myMediaObject.Videos.Where(type => type.TypeIdentifier == 2); 
var interviews = myMediaObject.Videos.Where(type => type.TypeIdentifier == 3); 

Existe-t-il un moyen plus efficace de le faire? J'adore utiliser Linq ici.

Répondre

8

Que diriez-vous:

var lookup = myMediaObject.Videos.ToLookup(type => type.TypeIdentifier); 
var trailers = lookup[1]; 
var clips = lookup[2]; 
var interviews = lookup[3]; 

Notez que cela se matérialiser les résultats immédiatement, alors que votre première version n'a pas. Si vous voulez toujours une exécution différée, vous pouvez utiliser GroupBy à la place - bien que ce sera un peu plus délicat plus tard. Cela dépend vraiment de ce que vous devez faire avec les résultats.

+0

Je n'ai pas besoin d'exécution différée aujourd'hui (cela pourrait changer dans le futur, donc merci pour le GroupBy). Je voudrais pouvoir faire ce var (bandes-annonces, clips, interviews) = myMediaObject.Videos.ToLookup (type => type.TypeIdentifier); – halivingston

+0

J'aime 'ToLookup'. Méthode très négligée. – leppie

+0

@halvingston: Est-ce vraiment un problème d'avoir quatre instructions à la place? Gardez à l'esprit que vous devez être en mesure de spécifier la partie 1, 2, 3 quelque part aussi ... –

Questions connexes