2010-12-13 16 views
19

Nur um diesen ganzen LINQ Sachen Kopf und es scheint, ich bin bei der ersten Hürde stecken.Wählen Sie eine einzelne Spalte aus dem Datensatz mit LINQ

Ich habe eine Datentabelle als solche:

OrderNo  LetterGroup Filepath 
----------- ----------- -------------------------------------------------- 
0   0   Letters/SampleImage.jpg 
0   0   Letters/UKPC7_0.jpg 
0   0   Letters/UKPC8_0.jpg 

Was ich brauche, ist all die Dateipfade aus der Filepath Spalte in ein String-Array zu erhalten. Ich dachte LINQ wäre perfekt dafür (habe ich Recht?), Aber kann nicht scheinen, die richtige Abfrage zu konstruieren.

Kann mir jemand Code-Beispiele zur Verfügung stellen, die mich in die richtige Richtung weisen? Ich habe herumgesucht - aber scheint nirgendwohin zu kommen.

Antwort

30

Es gibt Erweiterungsmethoden, die mit Daten machen Mengen arbeiten viel einfacher:

var filePaths = dataTable 
    .AsEnumerable() 
    .Select(row => row.Field<string>("Filepath")) 
    .ToArray(); 
11
string[] filePaths = (from DataRow row in yourDataTable.Rows 
        select row["Filepath"].ToString()).ToArray(); 
+0

Dies verwendet LINQ überhaupt nicht. – poindexter12

+2

@ poindexter12 - Was? Sicher sieht LINQ zu mir aus. – jfar

+0

@jfar: Das ist technisch LINQ-Syntax, also habe ich meine Down-Abstimmung entfernt. Aber im Geiste der Frage, ich denke, es gab ein bisschen mehr, das erklärt werden könnte. – poindexter12

2

Wenn Sie:

using System.Data.Linq; 

var filePaths = 
    from row in dataTable.AsEnumerable() 
    select row.Field<string>("Filepath"); 

var filePathsArray = filePaths.ToArray(); 

Sie auch die Methode Syntax, um es in einer Anweisung verwenden Sie möchten LINQ vollständig verwenden, Ihre Datenbank einrichten und ein Kontextobjekt erstellen. Dann sollten Sie in der Lage sein, so etwas zu tun:

var filepaths = from order in _context.Orders 
       select order.Filepath; 

Dieser Tisch wird unter der Annahme, für die Zeile Orders genannt wird, die ich von Ihren ersten Spalte Namen der Ordnung erraten. Wenn Sie wollte auch einen Satz der Bestellnummern zurückzukehren später für die Verwendung zu wissen, wo der Dateipfad kam von Ihnen so etwas wie dies tun könnte:

var results = from order in _context.Orders 
       select new 
       { 
        order.OrderNo, 
        order.Filepath 
       } 

Dies würde Ihnen eine neue anonyme Art, die sowohl diejenigen enthalten Werte als Eigenschaften.

Verwandte Themen