2016-04-20 12 views
0

Meine Beispieldaten coloumn, die aus einer CSV-Datei kommen istWie kann ich getrennte Wörter in einer Liste aufteilen?

|----Category------------| 

SHOES 
SHOES~SHOCKS 
SHOES~SHOCKS~ULTRA SOCKS 

Ich würde gerne die bestimmte Spalte spalten und die unterschiedlichen Werte in einer Liste wie

SHOES 
SHOCKS 
ULTRA SOCKS 

habe ich versucht, die folgende bekommen, aber es funktioniert nicht wie erwartet.

var test = from c in products select c.Category.Split('~').Distinct().ToList(); 

Es gibt tatsächlich Folgendes zurück.

enter image description here

Irgendwelche Gedanken bitte? Vielen Dank.

Antwort

1

Sie können SelectMany verwenden, um die Sammlung zu glätten:

products.SelectMany(p => p.Category.Split('~')).Distinct().ToList(); 
2

Ich würde SelectMany verwenden, um „zu glätten“, um die Liste vor dem Entfernen von Duplikaten:

products.SelectMany(c => c.Category.Split('~')) 
     .Distinct() 
1

Sie nah waren Sie brauchen nur zu glätten Ihre Sammlung herausziehen, um die einzelnen Artikel jeder Gruppierung über einen SelectMany() Anruf zu rufen:

Sie see a complete working example demonstrated here und unten sehen können:

// Example input 
var input = new string[] { "SHOES","SHOES~SHOCKS","SHOES~SHOCKS~ULTRA SOCKS" }; 
// Get your results (yields ["SHOES","SHOCKS","ULTRA SOCKS"]) 
var output = input.SelectMany(p => p.Split('~')) 
        .Distinct() 
        .ToList(); 
1

Merge diese Liste von list of strings in eine einzige Liste von SelectMany() mit und fügen Sie einfach einen weiteren Distinct auf Ihre Liste ..

var test = from c in products select c.Category.Split('~').Distinct().ToList().SelectMany(x => x).Distinct().ToList();

1

Hier ist, wie Sie würden es in der Abfragesyntax tun.

var test = (from p in products 
      from item in p.Category.Split('~') 
      select item).Distinct().ToList(); 
Verwandte Themen