3.906 messaggi dal 28 gennaio 2003
Ciao.
Il punto di partenza è un DataTable con due campi: id e nome.
In un ciclo, conoscendo il nome debbo trovare l'id.

Volevo un consiglio su come procedere, visto che deve essere una ricerca veloce, ma si può fare in diversi modi.

Io ho provato così:

1) creo la chiave primaria con dt_nome_id.PrimaryKey = New DataColumn() {dt_nome_id.Columns(0)}
uso il metodo find con Dim row As DataRow = dt_nome_id.Rows.Find(nome)


2) mi creo un dizionario con
Dim d As New Dictionary(Of String, Integer)(System.StringComparer.OrdinalIgnoreCase)
lo riempio iterando sulle righe del datatable e faccio la ricerca sul dizionario

3) mi creo una classe con due campi, id e nome, che implementa IComparable
itero sulle righe del datatable e riempio una lista degli oggetti della classe di prima
ordino la lista secondo il nome
faccio una ricerca binaria sulla lista

ps. naturalmente ho provato anche con linq, ma la domanda è ancora più pressante: cosa conviene usare per velocizzare?
Modificato da pietro09 il 03 luglio 2019 13:00 -

Pietro
84 messaggi dal 30 novembre 2004
Invece del DataTable non puoi creare una lista di Oggetti e usare linq?
Poi suppongo che il risultato della query sia a sua volta una lista in quanto potresti avere più oggetti che hanno lo stesso nome.
3.906 messaggi dal 28 gennaio 2003
Ciao.
Sì, posso farlo

Nella tabella database, sia l'id che il nome sono univoci.

Pietro
84 messaggi dal 30 novembre 2004
Volendo puoi anche fare:

mioDataTable.AsEnumerable().Where(x => x.Field<string>("Nome") == "QuelloCheVuoi").SingleOrDefault();
3.906 messaggi dal 28 gennaio 2003
Ciao. Ti ringrazio della risposta.

Pietro
84 messaggi dal 30 novembre 2004
Figurati, spero che era questo quello che volevi sapere.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.