2010-12-15 10 views
0

ich eine Reihe von Typ haben List<Int32> und eine andere Reihe von List<ClassA>, wo ClassA die folgende Darstellung hat:C# LINQ Frage

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

Ich möchte List<KeyValuePair<PropertyC, Int32>> mit LINQ eine Reihe von Art abzurufen, wo Int32 innerhalb enthalten ist List<Int32>PropertyB. Kann dies mit einer Linq-Anweisung geschehen?

+1

so finden Sie eine Liste von classA Objekte haben? Können Sie die Frage ein wenig klären – Andrew

+1

Können Sie uns ein Beispiel geben? – digEmAll

+0

Ich bin ein wenig verwirrt durch die Frage. Nach Reihe, meinst du ein Array? Wollen Sie sagen, dass Sie eine LINQ-Abfrage wünschen, die alle 'ClassA'-Objekte, die einen bestimmten Wert (int) in ihrer' PropertyB' enthalten, erhält? – vlad

Antwort

2

Ich glaube, Sie suchen so etwas wie:

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

... aber ich bin nicht ganz sicher.

(Richtet sich nach den Kommentaren, habe ich den ersten KeyValuePair Typ Argument string geändert.)

+0

+1 basierend auf der gegebenen Frage denke ich, das ist die wahrscheinlichste Antwort. – 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

Verdammt, sieht aus wie eine 1: 1-Kopie ... – Jan

+0

Ich denke OP wollte nur die ganze Zahl in der Liste enthalten, Sie haben das gesamte ClassA-Objekt im Schlüsselwertpaar zurückgegeben. PropertyB enthält die von ihm gewünschte Ganzzahl, enthält aber auch Ganzzahlen, die den Kriterien nicht entsprechen. Grundsätzlich ist Ihr KVP-Typ deaktiviert. – marr75

+0

@Richard: ja, aber 4 Minuten zu spät @ marr75: Sie will das Int aus der Liste , die ich in meiner Antwort und PropertyC aus den Matchin ClassA-Objekten. Ich habe das Codebeispiel korrigiert. – Jan

0

nicht ganz sicher, was Sie unter „wo Int32 innerhalb List<Int32> PropertyB enthalten ist“. Ich interpretiere es so, dass Sie wollen, dass der Wertteil von KeyValuePair eine ganze Zahl ist, die in PropertyB ist. Im folgenden Beispiel wähle ich das erste aus.

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));