2012-04-04 20 views
0

Wie geben Sie den zurückgegebenen Wert einer anderen Funktion in LINQ.Wie erhält man den zurückgegebenen Wert einer anderen Funktion?

Ich habe eine IEnumerable von objects(Say ObjColl). Von dieser Objektsammlung muss ich die Objekte basierend auf dem Rückgabewert eines anderen function(say GetObjPropertyValue) filtern. Meine endgültige Ausgabe sollte Dictionary des Objekts und sein propertyValue sein. Dieses Wörterbuch sollte nicht die Objekte enthalten, für die der Eigenschaftswert nichts ist.

GetObjPropertyValue Funktion nimmt Objekt als Eingabe und gibt seine Eigenschaft als String zurück. Aber manchmal gibt es nichts zurück, wenn diese Eigenschaft nicht auf Objekten existiert.

Meine Frage ist so etwas wie,

Dictionary(obj, string)=ObjColl.Where(Function(p) not GetObjPropertyValue(p) is nothing) 

aber in obiger Abfrage soll ich schreiben Code den Rückgabewert von GetObjPropertyValue (p) zu speichern und obj-p und return Kombination zum Wörterbuch hinzufügen. Wie schreibt man das ??

Beispiel siehe unten Code:

Die letzte Zeile Code unten ist falsch. aber bitte schlage mir vor, wie ich es korrigieren kann. Meine Absicht ist, ich will Ausgabe-Sammlung (sagen Wörterbuch) jedes Obstname und seine Farbe (von anderen Funktionsaufruf zurückgegeben) für alle Früchte, die die GetFruitColor ist nichts (es kann leer oder gültige Zeichenfolge sein).

[code] Private Funktion GetFruitColor (Frucht) als String 'Es gibt Fruchtfarbe zurück. 'Wenn gültiges Obst und Farbe nicht verfügbar ist, gibt es zurück "" (leere Zeichenfolge) ' Wenn Obst nicht gültig ist Frucht, gibt es nichts zurück. End Funktion

private sub MyMethod() 
    Create a list of strings. 
     Dim fruits As New List(Of String)(New String() _ 
           {"apple", "passionfruit", "banana", "mango", _ 
           "orange", "blueberry", "grape", "strawberry"}) 

Dim query = _fruits.Where(Function(fruit) k= GetFruitColor(fruit) if not k is nothing select fruit, k) 
End Sub 

In obigem Code letzte Zeile ist falsch. So, wie getFruitColor in k setzen, wie man es korrigiert, um den k Wert zu speichern und mir Ausgang als Verzeichnis der Frucht und k Wert zu geben.

Antwort

1

würde ich vorschlagen:

  • Projekt zu einem anonymen Typ, bestehend aus (Obst, Farbe)
  • Filter aus "Nichts" Farben
  • erstellen Wörterbuch

In C# würde dies be:

var query = fruits.Select(fruit => new { fruit, color = GetFruitColor(fruit) }) 
        .Where(pair => !string.IsNullOrEmpty(pair.color)) 
        .ToDictionary(pair => pair.fruit, pair => pair.color); 

Passen Sie entsprechend für VB :)

+0

Ausgezeichnete Antwort Jon Skeet. Es gibt mir die richtige Lösung. Vielen dank für Deine Hilfe. – kothasiva

Verwandte Themen