我的DataTable
列有Name
列。我想生成按字母顺序排列的唯一名称的集合。以下查询忽略 order by 子句。
var names =
(from DataRow dr in dataTable.Rows
orderby (string)dr["Name"]
select (string)dr["Name"]).Distinct();
为什么orderby
没有得到强制执行?
答案 0 :(得分:52)
问题在于Distinct 运营商不承认它会 保持原来的顺序 值。强>
所以你的查询需要像这样工作
var names = (from DataRow dr in dataTable.Rows
select (string)dr["Name"]).Distinct().OrderBy( name => name );
答案 1 :(得分:32)
为了使其更具可读性和可维护性,您还可以将其拆分为多个LINQ语句。
x1
,如果需要,可以进行投影x1
到x2
的不同列表x2
到x3
,按您的意愿排序答案 2 :(得分:8)
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
答案 3 :(得分:5)
尝试以下内容:
dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
答案 4 :(得分:1)
尝试以下
var names = (from dr in dataTable.Rows
select (string)dr["Name"]).Distinct().OrderBy(name => name);
这应该适用于你需要的东西。
答案 5 :(得分:0)
抽象:所有答案都有一些共同之处。
OrderBy需要成为最后的操作。
答案 6 :(得分:0)
您可以使用类似的东西:
dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);