Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Dopo più di un anno dal primo test drive ci siamo rimessi al volante della Renault 5 E-Tech Electric, questa volta utilizzandola come prima auto per circa due settimane. Scoprite con noi se il progetto convince ancora
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
Un proiettore economico, che fa della portabilità e immediatezza i suoi punti di forza. Adatto per una camera da letto o per la casa vacanze, è basato su sistema proprietario Linux ma offre piena compatibilità ufficiale a Netflix
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
Un notebook sviluppato in collaborazione con GoPro ma che risponde al meglio alle necessità di tutti coloro che creano contenuti video: robustezza, design, potenza di calcolo e funzionalità si abbinano al meglio tra di loro, pur se a prezzo di un costo elevato per via della tanta memoria onboard
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-07-2015, 23:42   #1
robertino_salemi
Senior Member
 
L'Avatar di robertino_salemi
 
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
[C#][LINQ] Creare un Dictionary da un DataTable

Sera a tutti,
ho un datatable formato da N colonne, due delle quali sono 'tipo' e 'colore'.

Avrei la necessità di popolare un Dictionary eseguendo un distinct sul dataTable per 'tipo' e tirando fuori i colori ad esso associati.

Ho semplicemente scritto:
Codice:
Dictionary<String, String> listOfTypeColours = new Dictionary<String, String>();

listOfTypeColours = fs.DataTable.AsEnumerable().Distinct()
                                               .ToDictionary(
                                                    row => row.Field<String>('Tipo'),
                                                    row => row.Field<String>('Colore')
                                                );
ma non riesco ad eseguire la distinct per 'tipo'.

Potreste aiutarmi?

Grazie
robertino_salemi è offline   Rispondi citando il messaggio o parte di esso
Old 31-07-2015, 08:54   #2
robertino_salemi
Senior Member
 
L'Avatar di robertino_salemi
 
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
Oppure potrei prima eseguire un distinct per ricavare i 'tipi' presenti....ma dopo come posso eseguire un iterator per ricavare il 'colore' corrispondente?

Codice:
List<string> arrType = fs.DataTable.AsEnumerable()
                                                 .Select(row => row.Field<String>('Tipo'))
                                                 .Distinct()
                                                 .ToList();
Grazie.
robertino_salemi è offline   Rispondi citando il messaggio o parte di esso
Old 31-07-2015, 09:20   #3
robertino_salemi
Senior Member
 
L'Avatar di robertino_salemi
 
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
Ragazzi, ho trovato questa soluzione funzionante:
Codice:
Dictionary<String, String> listOfTypeColours = new Dictionary<String, String>();                
				
List<string> arrType = fs.DataTable.AsEnumerable().Select(row => row.Field<String>('TIPO')).Distinct().ToList();

foreach (string item in arrType)
{
	string myKey = fs.DataTable.AsEnumerable().Where(row => row.Field<String>('TIPO').Equals(item))
											  .Select(row => row.Field<String>('COLORE')).First();

	listOfTypeColours.Add(item, myKey); 
}
.

Se comunque esiste un modo per eseguire un distinct sul DataTable e da esso ricavare un Dictionary, potreste indicarmelo?

Grazie.
robertino_salemi è offline   Rispondi citando il messaggio o parte di esso
Old 31-07-2015, 18:52   #4
lishi
Senior Member
 
L'Avatar di lishi
 
Iscritto dal: Sep 2006
Messaggi: 1539
A dire la verità mi sembra che la tua soluzione non sia corretta
se hai

"Pippo", "ROSSO"
"Pippo","Verde"

A pippo verrebbe associato solo il primo perdendo il secondo

Ti serve forse

Dictionary<string,List<string>> typeToColors;


Che puoi fare tipo

Codice:
Dictionary<string,List<string>> dict = dt.AsEnumerable().GroupBy(r => r.Field<string>("tipo")).ToDictionary(r => r.Key, r => r.AsEnumerable().Select(ri => ri.Field<string>("colore")).ToList());

Ultima modifica di lishi : 31-07-2015 alle 21:17.
lishi è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2015, 00:00   #5
robertino_salemi
Senior Member
 
L'Avatar di robertino_salemi
 
Iscritto dal: Apr 2009
Città: Aci Catena (CT)
Messaggi: 1021
Ho dimenticato di dire che l'associazione è unica...ho in join due tabelle da una delle quali si ricava il colore per ogni tipo....

Ultima modifica di robertino_salemi : 07-08-2015 alle 15:44.
robertino_salemi è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati? Renault 5 elettrica al giudizio definitivo: solo...
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
ASUS ProArt GoPro Edition è il notebook compatto per chi crea ASUS ProArt GoPro Edition è il notebook c...
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
La vera rivoluzione di AMD Zen 6 potrebb...
Xiaomi 17T e 17T Pro scendono di prezzo ...
Un brano sull'apocalisse per pubblicizza...
Ryzen 7 9800X3D raffreddato senza ventol...
Pubblicità nei display BMW: lo spot a sc...
TSMC accelera sui 1,4 nanometri: produzi...
Razer compra StreamElements: cambia tutt...
Il Task Manager di Windows arriva su Mac...
Sony: PS5 resta più conveniente d...
Ubisoft spegne uno dei suoi esperimenti ...
Garante Privacy: multa da 9,5 milioni di...
Windows 11, Microsoft promette un sistem...
Windows 11, l'ultima build sperimentale ...
YouTube cancella i canali ASMR più...
Valgono miliardi, ma non pubblicano rice...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:37.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v