2012-02-15 5 views
1

특정 기준을 충족하는 데이터 테이블 행 번호 배열을 얻으려면 어떻게해야합니까? 예를 들어, "DateTime"열에 datatable 있습니다. 나는 "DateTime"이 변수 startTime과 같은 데이터 테이블의 행 번호를 가져 오려고합니다.LINQ를 사용하여 특정 조건을 충족하는 데이터 테이블 행 번호를 얻으십시오.

데이터 테이블의 행 번호가 아닌 실제 행을 검색하는 방법을 알고 있습니다.

는 어떤 도움을 이해할 수있을 것이다 :

내가 당신을 위해 작동 할 수 인덱스에 대한 두 번째 입력을 할 수 있습니다 Select의 오버로드를 사용하여, 바로 질문을 읽고 있어요 경우
+1

참조 http://stackoverflow.com/questions/1165028/how-do-i-add-row-number-to-a-linq-query-or-entity –

+0

참조 http://code.msdn.microsoft .com/LINQ-to-DataSets-09787825 및 아래로 스크롤하여 선택 - 인덱싱 –

답변

6

. 그 날은, 첫 번째와 여섯 번째 행에 일치하는 경우

var indices = 
    table.AsEnumerable() 
     .Select((row, index) => new { row, index }) 
     .Where(item => item.row.Field<DateTime?>("DateTime") == startTime) 
     .Select(item => item.index) 
     .ToArray(); 

같은 뭔가가, 배열은 인덱스 0, 2 포함되며, 5. 물론, 쿼리의 경우에 각 인덱스에 1을 추가 할 수 있습니다

+0

대단히 감사합니다! – user1035217

+0

Anthony, ToArray()를 사용하여'var' 대신 다른 DataTable에 결과를 가져올 수 있습니까? 아니면'var'을'DataTable'으로 변환/변환해야합니까? 'ToDataTable()';) – bonCodigo

7
int count = tblData.AsEnumerable() 
    .Count(row => row.Field<DateTime>("DateTime").Equals(startTime)); 

또는 쿼리와 같은 :

int count = (from row in tblData.AsEnumerable() 
      where row.Field<DateTime>("DateTime").Equals(startTime) 
      select row).Count(); 
+0

+1 거기에'AsEnumerable()'이 필요합니까? 제 생각에 '카운트 (Count)'는 SQL과 잘 어울리므로 LINQ2SQL을 사용하여 RDBMS 계층에서 작업 할 수 있습니다. – dasblinkenlight

+0

@ dasblinkenlight, 그는 Linq-to-SQL을 사용하고 있는지 분명하지 않습니다. OP가 datatable을 말할 때, 나는 DataTable 타입의 실제 메모리 내 객체를 의미하는 것으로 간주합니다. 이것은 물론 잘못 될 수 있습니다. –

+0

@AnthonyPegram 맞아, 사실 질문에 그렇게 말하지 않을 때 linq-2-sql이라고 생각했습니다. – dasblinkenlight

-1

이 가능하지 않은 : 당신은 1. (.Select(item => item.index + 1) 예)로 시작하는 행 번호를 싶습니다. SQL (SQL을 사용한다고 가정 함)에서 반환 된 행 순서는 보장되지 않습니다. 행은 기본 키에 따라 물리적으로 정렬됩니다. 따라서 신뢰할 수있는 행 식별자가 필요한 경우 기본 키 번호/ID를 사용해야합니다.

관련 문제