LINQ를 사용하여 DataTable에서 고유하고 순서가 지정된 이름 목록을 얻으려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/59

  •  08-06-2019
  •  | 
  •  

문제

나는 DataTableName 열.알파벳순으로 정렬된 고유 이름 모음을 생성하고 싶습니다.다음 쿼리는 주문 절.

var names =
    (from DataRow dr in dataTable.Rows
    orderby (string)dr["Name"]
    select (string)dr["Name"]).Distinct();

orderby 집행 안되나요?

도움이 되었습니까?

해결책

더 읽기 쉽고 유지 관리하기 쉽게 만들기 위해 여러 LINQ 문으로 분할할 수도 있습니다.

  1. 먼저 데이터를 새 목록으로 선택하고 이를 호출해 보겠습니다. x1, 원하는 경우 투영을 수행합니다.
  2. 다음으로, 다음과 같은 고유한 목록을 만듭니다. x1 ~ 안으로 x2, 필요한 구별을 사용하여
  3. 마지막으로 다음에서 순서가 지정된 목록을 만듭니다. 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"]);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top