2012-12-03 8 views
1

SSMS에서 실행되고 원하는대로 32 개 결과 집합을 가져 오는 쿼리가 있습니다 (SQL에서).LINQ 쿼리가 메모리 내 데이터에 사용될 때 잘못된 결과를 반환합니다.

그런 다음 SQL 쿼리를 LINQ 쿼리로 변환하여 동일한 데이터베이스에 대해 Visual Studio에서 실행하고 원하는대로 32 개 행 목록을 가져옵니다.

여기에 문제가 있습니다. 나는이

MyEntities entities = new MyEntities(); 
List<MyEntity> resultset = entities.MyEntity.ToList(); 

그런 짓을 ... 그리고 메모리 데이터 수집에 대한 내 LINQ 쿼리를 실행하면 난 단지 27 개 행을 얻을 현재 행의 일부는 심지어 별개되지 않도록 반복 -하지만 그들은 확실히 데이터베이스에 있습니다.

LINQ는 데이터베이스에 쿼리를 보낼 때 SQL을 생성하므로 결과가 정확하지만 대상이 메모리 내 데이터 구조 인 경우 다른 작업을 수행하기 때문입니다. 여기서 무슨 일이 일어나고 있는지 확실하지 않습니다. 이견있는 사람? 미리 감사드립니다!

편집 : 설명하기 만하면됩니다. 이것은 올바른 결과

List<MyEntity> results = entities.MyEntity.Where(x => x == ...).ToList(); 

이 그것을 해결되지

MyEntities entities = new MyEntities(); 
List<MyEntity> listData = entities.MyEntity.ToList(); 

List<MyEntity> results = listData.Where(x => x == ...).ToList(); 
+0

생성 된 SQL 쿼리는 무엇입니까? SQL Server 프로파일 러를 체크인하십시오. –

+2

이 같은 차이점의 일반적인 이유 중 하나는 Sql이 linq에서 객체로 대소 문자를 구분하는 경우 대개 대/소문자를 구분하지 않는다는 것입니다. – sgmoore

+0

불행히도 서버에서 추적을 실행할 수있는 권한이 없습니다. 아마 내가 충분히 명확하지 않았습니다. 쿼리가 데이터베이스에 대해 직접 실행될 때 올바른 결과가 반환되었다고 말했을 때, 이것이 내가 의도 한 것입니다. 리스트 result = entities.MyEntity.Where (x = > x = ..). ToList(); –

답변

1

않습니다를 제공합니다!

해결책은 데이터베이스 테이블에 기본 키를 설정하는 것이 었습니다.

감사 : 어쨌든 :)

관련 문제