LINQ를 사용하여 DataTable에서 고유하고 순서가 지정된 이름 목록을 얻으려면 어떻게 해야 합니까?
문제
나는 DataTable
와 Name
열.알파벳순으로 정렬된 고유 이름 모음을 생성하고 싶습니다.다음 쿼리는 주문 절.
var names =
(from DataRow dr in dataTable.Rows
orderby (string)dr["Name"]
select (string)dr["Name"]).Distinct();
왜 orderby
집행 안되나요?
해결책
더 읽기 쉽고 유지 관리하기 쉽게 만들기 위해 여러 LINQ 문으로 분할할 수도 있습니다.
- 먼저 데이터를 새 목록으로 선택하고 이를 호출해 보겠습니다.
x1
, 원하는 경우 투영을 수행합니다. - 다음으로, 다음과 같은 고유한 목록을 만듭니다.
x1
~ 안으로x2
, 필요한 구별을 사용하여 - 마지막으로 다음에서 순서가 지정된 목록을 만듭니다.
x2
~ 안으로x3
, 원하는 대로 정렬
다른 팁
문제는 별개의 연산자가 원래 값의 순서를 유지할 것을 부여하지 않는다는 것입니다.
따라서 귀하의 쿼리는 다음과 같이 작동해야 합니다
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"]);
제휴하지 않습니다 StackOverflow