2009-08-11 3 views
2

Ich habe eine Datenbankspalte, durch Doppelpunkte begrenzt, beschreibt eine Kategorie Hierarchie wie folgt:Linq extrahieren Segment von abgegrenzten Text Spalte

ID | Kategorie

100 | Domestic: Bäume: Obst: Äpfel

Ich möchte nur das dritte Segment der Hierarchie "Frucht" aus dem Text extrahieren. Wie kann ich Linq Regex oder Linq Filtering verwenden, um genau dieses Segment zu extrahieren? Ist es eine gute Idee, Informationen auf diese Weise für jedes Mal zu extrahieren, wenn ein Benutzer eine Kategorie auswählt?

+0

Ist die Normalisierung der Datenbank eine Option? – tvanfosson

+0

Ja, es ist möglich, die Daten in eigene Kategoriespalten wie cat1, cat2, cat3 aufzuteilen. Wäre das der übliche Weg, Dinge zu tun? Ich habe die von Scott Levey bereitgestellte Linq-Abfrage getestet und es dauert ungefähr 7 Sekunden. Ich bin mir sicher, dass das Zerlegen der Zeichenfolge bei jedem Klick nicht der Weg sein kann, den die meisten Seiten machen. –

Antwort

1

Ihre Frage macht es klingen wie Sie eine Linq Antwort wollen - nur dann, wenn Sie verwenden Linq wollten, könnten Sie dies tun ...

string s = "Domestic:Trees:Fruit:Apples".Split(':') 
      .Select((item, index) => new {item, index}) 
      .Where(i => i.index == 2) 
      .Select(i => i.item); 

Tun Sie es in Linq vs nur die Zeichenfolge aufteilen und nehmen Sie die, die Sie brauchen, wird nicht Ihren Code einfacher zu lesen - so möchten Sie vielleicht nur mit einem geraden Split gehen, wie Andrew vorgeschlagen.

1

Versuchen die String.Split(Char[]) Methode:

Gibt ein String-Array, das den Strings in diesem Fall enthält, dass durch Elemente eines abgegrenzt sind angegeben Unicode Zeichen-Array.

Grundsätzlich können Sie die ursprüngliche Zeichenfolge basierend auf einem von Ihnen angegebenen Trennzeichen aufteilen. Diese Methode gibt String[] zurück. Hier ist ein kleines Beispiel dafür, wie man es benutzt:

using System; 

class Program 
{ 
    static void Main() 
    { 
     String s = "Domestic:Trees:Fruit:Apples"; 
     String[] parts = s.Split(':'); 
     Console.WriteLine(parts[2]); 
    } 
}