2010-12-13 11 views
19

Po prostu rozglądam się po tym wszystkim rzeczy LINQ i wydaje mi się, że utknąłem na pierwszej przeszkodzie.Wybierz pojedynczą kolumnę ze zbioru danych za pomocą LINQ

Mam DataTable jako takie:

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

Co potrzebne jest, aby wszystkie filepaths z kolumny filePath do tablicy String. Myślałem, że LINQ będzie idealny do tego (mam rację?), Ale nie mogę stworzyć właściwego zapytania.

Czy ktoś może dostarczyć próbki kodu, które wskazywałyby mi właściwy kierunek? Szukałem - ale nigdzie się nie dostaję.

Odpowiedz

30

Istnieją metody rozszerzające, które czynią pracę z danymi ustawia znacznie łatwiejsze:

using System.Data.Linq; 

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

var filePathsArray = filePaths.ToArray(); 

Można również użyć składni metody, aby umieścić go w jednym stwierdzeniem:

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

To wcale nie korzysta z LINQ. – poindexter12

+2

@ poindexter12 - Co? Pewnie dla mnie wygląda LINQ. – jfar

+0

@jfar: To jest technicznie składnia LINQ, więc usunąłem mój głos w dół. Jednak w duchu pytanie, myślę, że było trochę więcej, które można by wyjaśnić. – poindexter12

2

Jeśli chcesz używać LINQ do końca, skonfiguruj bazę danych i utwórz obiekt kontekstowy. Następnie powinieneś być w stanie zrobić coś takiego:

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

to zakładając, że tabela wiersz nazywa rozkazy, które Chyba po imieniu kolumny kolejności. Jeśli chciał wrócić zbiór liczb porządkowych, jak również do korzystania później wiedzieć, gdzie ścieżka do pliku pochodzi mógłby zrobić coś tak:

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

To daje nowy typ anonimowy, który zawierał zarówno tych wartości jako właściwości.

Powiązane problemy