2010-12-15 6 views
0

J'ai une série de type List<Int32> et une autre série de List<ClassA>, où ClassA a la représentation suivante:C# LINQ question

public ClassA 
{ 
    public String PropertyA {get; set;} 
    public List<Int32> PropertyB {get; set;} 
    public String PropertyC {get; set;} 
} 

Je veux récupérer LINQ une série de type List<KeyValuePair<PropertyC, Int32>>Int32 est contenu dans List<Int32>PropertyB. Est-ce que cela peut être fait en utilisant une instruction linq?

+1

pour que vous ayez une liste d'objets CLASSA? Pouvez-vous clarifier un peu la question? – Andrew

+1

Pourriez-vous nous donner un exemple? – digEmAll

+0

Je suis un peu confus par la question. Par séries, voulez-vous dire un tableau? Voulez-vous dire que vous voulez une requête LINQ qui obtient tous les objets 'ClassA' qui contiennent une valeur spécifique (l'int) dans leur' PropertyB'? – vlad

Répondre

2

Je pense que vous cherchez quelque chose comme:

var query = (from x in listOfInt32s 
      from y in listOfClassAs 
      where y.PropertyB.Contains(x) 
      select new KeyValuePair<string, int>(y.PropertyC, x)) 
      .ToList(); 

... mais je ne suis pas tout à fait sûr.

(Selon les commentaires, j'ai changé le premier argument de type KeyValuePair à string.)

+0

+1 basé sur la question donnée Je pense que c'est la réponse la plus probable. – jsmith

1
var q = (from i in listOfInts 
     from a in listOfA 
     where 
       a.PropertyB.Contains(i) 
     select new KeyValuePair<String, int>(a.PropertyC, i)) 
     .ToList(); 
+0

damn, ressemble à une copie 1: 1 ... – Jan

+0

Je pense que OP voulait juste l'entier contenu dans la liste, vous avez retourné l'ensemble de l'objet ClassA dans la paire de valeur de clé. PropertyB contiendra l'entier qu'il veut mais aura aussi des entiers qui ne correspondent pas aux critères. Fondamentalement, votre type KVP est désactivé. – marr75

+0

@Richard: oui, mais 4 minutes de retard @ marr75: Elle veut l'int hors de la liste , le i dans ma réponse et PropertyC sur les objets de classeA matchin. J'ai corrigé l'exemple de code. – Jan

0

Pas tout à fait sûr de ce que vous entendez par "où Int32 est contenu dans List<Int32> PropertyB". J'interprète cela pour signifier que vous voulez que la partie value de KeyValuePair soit un entier qui est dans PropertyB. Dans l'exemple ci-dessous, je choisis le premier.

List<ClassA> myList = GetListOfStuff(); //However you get the list 
var results = from myList 
       select new KeyValuePair<string, int>(a.PropertyC, a.PropertyB.First()); 
0
var idList = GetIdList(); //List of integer 
var objectList = GetObjectList(); //List of ClassA 
var pairs = objectList 
    .SelectMany(item => item.PropertyB 
     .Select(id => new KeyValuePair<string, int>(item.PropertyC, id))) 
    .Where(item => idList.Contains(item.Value));