Vra

Ek het'n DataTable met'n Name kolom.Ek wil om te genereer'n versameling van die unieke name bestel alfabeties.Die volgende navraag ignoreer die om deur klousule.

var names =
    (from DataRow dr in dataTable.Rows
    orderby (string)dr["Name"]
    select (string)dr["Name"]).Distinct();

Hoekom nie die orderby nie afgedwing word?

Was dit nuttig?

Oplossing

Te maak dit meer leesbaar en te onderhou, jy kan ook verdeel dit in verskeie LINQ state.

  1. Eerste, kies jou data in'n nuwe lys, kom ons noem dit x1, doen'n projeksie as jy wil
  2. Volgende, skep'n duidelike lys van x1 in x2, met behulp van watter onderskeid wat jy nodig het
  3. Ten slotte, die skep van'n geordende lys, van x2 in x3, sortering deur alles wat jy wil

Ander wenke

Die probleem is dat die Duidelike operateur wat nie gee wat dit sal handhaaf die oorspronklike orde van waardes.

So jou navraag sal nodig het om te werk soos hierdie

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);

Probeer die volgende:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);

Probeer die volgende

var names = (from dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy(name => name);

dit moet werk vir wat jy nodig het.

Om abstrakte:al die antwoorde het iets in gemeen.

OrderBy gedoen moet word om die finale operasie.

Jy kan gebruik om iets soos dit:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top