Hoe kry ek'n duidelike, geordende lys van name van'n DataTable gebruik LINQ?
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?
Oplossing
Te maak dit meer leesbaar en te onderhou, jy kan ook verdeel dit in verskeie LINQ state.
- Eerste, kies jou data in'n nuwe lys, kom ons noem dit
x1
, doen'n projeksie as jy wil - Volgende, skep'n duidelike lys van
x1
inx2
, met behulp van watter onderskeid wat jy nodig het - Ten slotte, die skep van'n geordende lys, van
x2
inx3
, 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