나는이 DataTable
와 Name
열입니다. 알파벳순으로 정렬 된 고유 한 이름 모음을 생성하고 싶습니다. 다음 쿼리는 order by 절을 무시합니다 .
var names =
(from DataRow dr in dataTable.Rows
orderby (string)dr["Name"]
select (string)dr["Name"]).Distinct();
왜 orderby
시행되지 않습니까?
답변
더 읽기 쉽고 유지 관리하기 쉽도록 여러 LINQ 문으로 분할 할 수도 있습니다.
- 먼저 데이터를 새 목록으로 선택
x1
하고 원하는 경우 프로젝션을 수행합니다. - 다음으로 필요한 구별을 사용하여 에서
x1
로 구별 목록을 작성하십시오.x2
- 마지막으로,에서
x2
로x3
, 원하는대로 정렬하여 정렬 된 목록을 만듭니다.
답변
문제는 Distinct 연산자가 값의 원래 순서를 유지하도록 허용하지 않는다는 것입니다.
따라서 쿼리는 다음과 같이 작동해야합니다.
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);
답변
다음을 시도하십시오.
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);
이것은 필요한 것을 위해 작동합니다.
답변
요약하자면 모든 답변에는 공통점이 있습니다.
OrderBy는 최종 작업이어야합니다.
답변
다음과 같이 사용할 수 있습니다.
dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);