DataTable à la Liste des<object>
Comment dois-je prendre un DataTable et la convertir en une Liste?
J'ai inclus un peu de code ci-dessous en C# et VB.NET le problème avec ces deux, c'est que nous créons un nouvel objet à renvoyer les données, ce qui est très coûteux. J'ai besoin de retourner une référence à l'objet.
La DataSetNoteProcsTableAdapters.up_GetNoteRow objet n'mettre en œuvre les INote interface.
Je suis en utilisant ADO.NET, avec .NET 3.5
de code c#
public static IList<INote> GetNotes()
{
DataSetNoteProcsTableAdapters.up_GetNoteTableAdapter adapter =
new DataSetNoteProcsTableAdapters.up_GetNoteTableAdapter();
DataSetNoteProcs.up_GetNoteDataTable table =
new DataSetNoteProcs.up_GetNoteDataTable();
IList<INote> notes = new List<INote>();
adapter.Connection = DataAccess.ConnectionSettings.Connection;
adapter.Fill(table);
foreach (DataSetNoteProcs.up_GetNoteRow t in table) {
notes.Add((INote)t);
}
return notes;
}
VB.NET Code
Public Shared Function GetNotes() As IList(Of INote)
Dim adapter As New DataSetNoteProcsTableAdapters.up_GetNoteTableAdapter
Dim table As New DataSetNoteProcs.up_GetNoteDataTable
Dim notes As IList(Of INote) = New List(Of INote)
adapter.Connection = DataAccess.ConnectionSettings.Connection
adapter.Fill(table)
For Each t As DataSetNoteProcs.up_GetNoteRow In table
notes.Add(CType(t, INote))
Next
Return notes
End Function
Aucune raison pourquoi vous ne l'utilisez pas LINQ2SQL pour cela?
Dup: stackoverflow.com/questions/545328/...
Le client ne souhaite pas utiliser LINQ2SQL ou LINQ en général. Merci pour le lien, cela va nous aider beaucoup. Je vais effectuer quelques temps et voir ce qui se passe
J'ai répondu à cette ici stackoverflow.com/a/43040990/74585
Dup: stackoverflow.com/questions/545328/...
Le client ne souhaite pas utiliser LINQ2SQL ou LINQ en général. Merci pour le lien, cela va nous aider beaucoup. Je vais effectuer quelques temps et voir ce qui se passe
J'ai répondu à cette ici stackoverflow.com/a/43040990/74585
OriginalL'auteur Coppermill | 2009-04-02
Vous devez vous connecter pour publier un commentaire.
Non, la création d'une liste n'est pas coûteux. Par rapport à la création de la table de données et récupérer les données à partir de la base de données, il est très bon marché.
Vous pouvez la rendre encore moins cher par la création de la liste après le remplissage de la table, de sorte que vous pouvez définir la capacité initiale pour le nombre de lignes que vous allez mettre dans:
Non, il veut dire ce qu'il a écrit. Qui sera la cause de la liste de définir la taille de l'ensemble de résultats.
OriginalL'auteur Guffa
J'ai une autre approche qui pourrait être la peine de prendre un coup d'oeil.
C'est une méthode d'assistance. Créer une classe personnalisée fichier nommé CollectionHelper:
Imaginez que vous voulez obtenir une liste de clients. Maintenant, vous aurez la suite de l'appelant:
Les attributs que vous avez dans votre DataTable doit correspondre à votre Client de classe (champs comme le Nom, Adresse, numéro de Téléphone).
J'espère que cela aide!
Pour ceux qui sont disposés à savoir pourquoi utiliser les listes à la place de tables de données: texte du lien
La totalité de l'échantillon:
http://lozanotek.com/blog/archive/2007/05/09/Converting_Custom_Collections_To_and_From_DataTable.aspx
cette conversion se faire avec un datareader?
Je me promenais si il est possible d'éviter ce "doit correspondre à" pour les attributs de classe et datatable champs!
Je ne peux pas obtenir ce à la compilation j'ai l'erreur: "Erreur 45 Argument 1: impossible de convertir de 'Système.Les Collections.Génériques.Liste<Système.Les données.DataRow>' pour 'Système.Les données.DataTable
OriginalL'auteur Junior M
Pourquoi ne pas passer le DataTable dans la fonction au lieu d'instancier? Ce serait tout simplement contenir une référence.
C'est beaucoup trop simple une réponse aussi être utile pour vous, j'en suis sûr, mais je ne vois pas comment cela ne résout pas votre problème.
OriginalL'auteur cerhart
Pas sûr si c'est ce que vous cherchez, mais vous pouvez essayer quelque chose comme cela.
C'est ce que j'ai fait donc, espérons que cette aide. Pas sûr si c'est la bonne façon de le faire, mais il fonctionne pour ce que nous en avions besoin pour.
avec cela, vous pouvez mapper les attributs que vous souhaitez utiliser. c'est un plus, mais pas mal
OriginalL'auteur
Voulez-vous de référence, les lignes de la table? Dans ce cas, vous devez utiliser la DataTable.Les lignes de propriété.
Essayez ceci:
Si les lignes de la table en œuvre INote alors cela devrait fonctionner.
Sinon vous pouvez faire comme vous l'avez fait ci-dessus:
Non, cela ne devrait pas créer de nouveaux objets. Tout ce que vous faites est de lancer un objet à un autre type.
OriginalL'auteur Rune Grimstad
Si les propriétés de la liste correspondent aux noms de champ dans la table de données, vous devriez être en mesure de créer une sorte de générique de réflexion routine.
OriginalL'auteur Craig