2010-01-15 6 views
2

J'ai deux collections et je dois créer une nouvelle collection à partir des deux collections.Aide à la requête Linq

Supposons que la classe suivante:

public class Widget 
{ 
    property int Id{get;set;} 
    property string Label{get;set;} 
} 

Nous avons deux classes IList. Je voudrais créer un type anonyme avec Id, Étiquette et Exists

Ainsi faisant cela pour Id et de l'étiquette, j'ai:

var newCol=from w in widgets 
      select new {Id=w.Id,Label=w.Label,Exists=????} 

Est-il possible dans LINQ je peux déterminer existe sans écrire la code de boucle moi-même ici?

Modifier

Existant nous dit si le widget est dans la deuxième liste. Ainsi, par exemple une solution que je viens de penser était:

var newCol=from w in widgets 
      select new {Id=w.Id,Label=w.Label,Exists=myWidgets.Contains(w)} 

Où mes widgets est le deuxième IList.

+1

Nous avons besoin de plus d'informations. Quel est l'autre IList? Que signifie Exists? Voulez-vous dire que vous voulez vérifier si ce widget existe dans l'autre IList? –

+0

Oui, donc nous faisons essentiellement une jointure gauche deux listes btw, et je veux savoir quand l'élément est dans les deux listes. – JoshBerke

Répondre

1

Vous pouvez aussi le faire en utilisant GroupJoin:

var newCol = widgets.GroupJoin(
    otherWidgets, 
    w => w.Id, 
    w => w.Id, 
    (w, joined) => new { Id = w.Id, Label = w.Label, Exists = joined.Any() }); 
3

Votre question est vraiment vague, mais je devine que c'est ce que vous voulez:

var newCol = from w in widgets 
      select new { Id = w.Id, Label = w.Label, 
       Exists = others.Contains(o => o.Id == w.Id } 
+0

Nice !!!!!!!!!!!!!!!! –

+0

Oui, je suis désolé que le vague ait eu du mal à être explicite. – JoshBerke

+0

me battre à elle. Je devais essayer assez fort pour comprendre ce qu'il demandait. Bien que je ne dérange pas avec le Lambda dans la méthode contains, fais juste 'Contains (w)' –