2010-12-13 7 views
19

Mi sto solo muovendo attorno a tutto questo materiale LINQ e sembra di essere bloccato al primo ostacolo.Seleziona una colonna dal set di dati con LINQ

Ho un datatable come tale:

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

Che cosa ho bisogno è quello di ottenere tutti i filepaths dalla colonna Filepath in un array di stringhe. Pensavo che LINQ sarebbe stato perfetto per questo (ho ragione?), Ma non riesco a costruire la query corretta.

Qualcuno può fornire alcuni esempi di codice che potrebbero indicarmi la giusta direzione? Ho cercato in giro - ma non sembrano arrivare da nessuna parte.

risposta

30

Ci sono metodi di estensione che fanno lavorare con insiemi di dati molto più facile:

using System.Data.Linq; 

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

var filePathsArray = filePaths.ToArray(); 

È anche possibile utilizzare la sintassi metodo per metterlo in una dichiarazione:

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

Questo non sta utilizzando LINQ affatto. – poindexter12

+2

@ poindexter12 - Cosa? Sicuramente mi sembra LINQ. – jfar

+0

@jfar: questa è tecnicamente la sintassi LINQ, quindi ho rimosso il mio voto negativo. Tuttavia, nello spirito della domanda, penso ci fosse un po 'di più che potrebbe essere spiegato. – poindexter12

2

Se vuoi utilizzare LINQ fino in fondo, configurare il tuo database e creare un oggetto di contesto. Poi si dovrebbe essere in grado di fare qualcosa del genere:

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

Ciò presuppone il tuo tavolo per la riga è chiamato Ordini, che credo per nome colonna di ordine. Se si voleva restituire un insieme di numeri d'ordine, nonché per l'utilizzo in seguito per sapere dove il percorso del file è venuto da si potrebbe fare qualcosa in questo modo:

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

Questo darebbe un nuovo tipo anonimo che conteneva sia quelli valori come proprietà.