web-dev-qa-db-fra.com

Sélectionnez une seule colonne de l'ensemble de données avec LINQ

Je me suis contenté de faire le tour de tous ces trucs LINQ et il semble que je suis coincé au premier obstacle.

J'ai une table de données en tant que telle:

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

Ce dont j'ai besoin est d'obtenir tous les chemins de fichiers de la colonne Filepath dans un tableau de chaînes. Je pensais que LINQ serait parfait pour cela (ai-je raison?), Mais je n'arrive pas à construire la bonne requête.

Quelqu'un peut-il fournir des exemples de code qui me dirigeraient dans la bonne direction? J'ai cherché autour - mais ne semble pas aller nulle part.

21
m.edmondson

Il existe des méthodes d'extension qui facilitent le travail avec les ensembles de données:

using System.Data.Linq;

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

var filePathsArray = filePaths.ToArray();

Vous pouvez également utiliser la syntaxe de la méthode pour la mettre dans une seule instruction:

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

Si vous souhaitez utiliser LINQ à fond, configurez votre base de données et créez un objet contextuel. Vous devriez alors pouvoir faire quelque chose comme ceci:

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

Cela suppose que votre table pour la ligne est nommée Orders, que je suppose par le nom de votre première colonne de commande. Si vous souhaitez également renvoyer un ensemble de numéros de commande pour une utilisation ultérieure afin de savoir d'où vient le chemin du fichier, vous pouvez faire quelque chose comme ceci:

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

Cela vous donnerait un nouveau type anonyme contenant à la fois ces valeurs en tant que propriétés.

2
poindexter12