我有DataTable
一个Name
专栏。我想生成按字母顺序排列的唯一名称的集合。以下查询忽略order by子句。
var names =
(from DataRow dr in dataTable.Rows
orderby (string)dr["Name"]
select (string)dr["Name"]).Distinct();
为什么不orderby
强制执行?
问题是 Distinct 运算符不同意它将保持值的原始顺序。
所以你的查询需要像这样工作
var names = (from DataRow dr in dataTable.Rows
select (string)dr["Name"]).Distinct().OrderBy( name => name );
To make it more readable and maintainable, you can also split it up into multiple LINQ statements.
x1
, do a projection if desiredx1
into x2
, using whatever distinction you requirex2
into x3
, sorting by whatever you desire var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
尝试以下方法:
dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
尝试以下
var names = (from dr in dataTable.Rows
select (string)dr["Name"]).Distinct().OrderBy(name => name);
这应该可以满足您的需要。
你可以使用类似的东西:
dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
抽象:所有的答案都有一些共同点。
OrderBy 需要是最后的操作。