Comment voulez-vous convertir un DataTable dans une liste générique?
Actuellement, je suis en utilisant:
DataTable dt = CreateDataTableInSomeWay();
List<DataRow> list = new List<DataRow>();
foreach (DataRow dr in dt.Rows)
{
list.Add(dr);
}
Est-il un meilleur/la magie de la sorte?
- Qu'essayez-vous de le faire avec une Liste que vous ne pouvez pas faire avec votre DataRowCollection?
Vous devez vous connecter pour publier un commentaire.
Si vous êtes en utilisant .NET 3.5, vous pouvez utiliser
DataTableExtensions.AsEnumerable
(une méthode d'extension) et puis si vous avez vraiment besoin d'unList<DataRow>
au lieu de simplementIEnumerable<DataRow>
vous pouvez appelerÉnumérable.ToList
:ou
list
en json.using System.Linq;
comme normal pour LINQ. Il devrait être bon à ce point. (J'ai ajouté que dans la réponse.)List<MyType> = ??
Cela peut-il être fait ?DataRow
dans unMyType
...Avec C# 3.0 et System.Data.DataSetExtensions.dll,
Vous pouvez utiliser
dt.Select()
renvoie toutes les lignes de votre tableau, un tableau de des datarow, et laList
constructeur accepte que, groupe d'objets, comme un argument d'abord remplir votre liste.Vous pouvez créer une fonction d'extension comme :
Si vous voulez juste une liste de valeurs à partir de la "ID" champ int retourné, vous pouvez utiliser...
J'ai ajouté un peu de modification pour le code de cette réponse (https://stackoverflow.com/a/24588210/4489664) parce que pour les Types nullables il sera de retour exception
De nouveau, à l'aide de 3.5 vous pouvez faire comme:
BRGDS
Voici une DataTable méthode d'extension qui convertit une Table de données à une liste générique.
https://gist.github.com/gaui/a0a615029f1327296cf8
Utilisation:
Plus "magiques" de chemin, et n'a pas besoin .NET 3.5.
Si, par exemple,
DBDatatable
était de retour d'une seule colonne de Guid (uniqueidentifier SQL) alors vous pouvez utiliser:DataTable.Select()
ne marche pas donner les Lignes dans l'ordre où ils ont été présents dans la datatable.Si l'ordre est important, je ressens une itération sur la collection datarow et la formation d'une Liste est la bonne façon d'aller ou vous pouvez également utiliser la surcharge de
DataTable.Select(string filterexpression, string sort)
.Mais cette surcharge peuvent ne pas traiter la commande (comme la commande par cas ...) que SQL fournit.
Utilisation
System.Data
espace de noms, alors vous obtiendrez.AsEnumerable()
.Cela a fonctionné pour moi:
Besoin d'au moins .Net Framework 3.5,
Code ci-dessous affiche DataRow tourné vers Génériques.IEnumerable, comboBox1 a été utilisé pour une meilleure illustration.
Sortie
Nous pouvons utiliser une Méthode Générique pour la conversion de
DataTable
àList
au lieu de saisir manuellement la conversion d'unDataTable
àList
.Remarque:
DataTable
'sColumnName
etType
'sPropertyName
doit être la même.Appel de la Méthode ci-dessous:
https://www.nuget.org/packages/AD.GenericConversion/
Caisse bibliothèque pour la conversion, vous trouverez tous les types de conversion ici, comme :-
Vous pouvez utiliser une méthode générique pour datatable liste générique
Conversion
DataTable
GénériquesDictionary