Se încearcă obținerea unei valori distincte a listei pe coloană în aceeași coloană cu rezultate

Deci, pentru acest exemplu, permiteți să spun că am un DataTable care se numește dt și are un număr de coloane, vreau să primesc înapoi o listă cu numele coloanelor și câte valori diferite sunt în fiecare coloană. De asemenea, aș dori setul de rezultate ordonat de cel mai mare la cel mai mic

De exemplu, am un tabel cu 4 coloane și 40 rânduri de date, în prima coloană există 4 valori distincte, a doua coloană 12, a treia coloană 20, a patra coloană 40. Vreau setul meu de rezultate să arate astfel

Column4 40
Column3 20
Column2 12
Column1 4

Cum aș putea realiza acest lucru folosind C# și Linq?

0
Ce ai încercat? Cât de departe ai ajuns? Puteți obține un IEnumerable al fiecărei coloane? Puteți obține un IEnumerable al tuturor valorilor dintr-o anumită coloană? Odată ce ai 2D IEnumerable interogarea însăși este destul de simplă? Ai scris acea parte? Puneți problema în bucăți mici. Rezolvați piesele pe care le puteți și vă putem ajuta cu ceea ce nu puteți.
adăugat autor Servy, sursa

2 răspunsuri

Codul dvs. LINQ

var result = dt.Columns
    .Cast()
    .Select(dc => new {
        Name = dc.ColumnName,
        Values = dt.Rows
            .Cast()
            .Select(row => row[dc])
            .Distinct()
            .Count()})
    .OrderBy(item => item.Values);
0
adăugat
A lucrat ca un farmec! Mulțumiri!
adăugat autor Philip Loyer, sursa
var result =
    dt.Columns
        .Cast()
        .Select(c =>
            new
            {
                c.ColumnName,
                DistinctValuesCount =
                    dt.Rows
                        .Cast()
                        .Select(r => r[c])
                        .Distinct()
                        .Count()
            })
        .OrderByDescending(i => i.DistinctValuesCount)
        .ToArray(); 
0
adăugat