2017-04-11 1 views
1

이 엔티티 프레임 워크 linq 쿼리를 변경하는 방법을 알고 싶습니다.Entity Framework LINQ 쿼리

나는 다음과 같은 열이 TABLEA 있습니다 프로젝트 (VARCHAR), 코드 (VARCHAR), 평가 (정수)

코드 데이터가 계층 적 - 즉, 10011, 10012은 10013 명 .. 등 코드의 자녀 1001 또 다른 예 123001, 123002, 12300, 12301 코드의 아이들은 1230

내가 쿼리 코드의 모든 행을 가서 평가에 모든 것이 어린이를 검색 한 후 프로젝트를 기반으로하고 싶은 있습니다 = 0

(예를 들어)

아래 코드를 작성했지만 정확한 결과를 제공하지 않습니다.

,210
var result = db.tableA.AsQueryable(); 
var tempResult = result.Where(p => p.project.Equals(ProjectValue)); 
result = tempResult.Where(c => c.Code.StartsWith(c.Code) && c.assess== 0); 

위의 코드의 자식을 반환하지 않습니다 쿼리 경우 프로젝트와 동일한 'ProjectValue'

+0

실제로 프로젝트에 저장되는 내용은 무엇입니까? 아이들이 같은 프로젝트를 공유하지 않습니까?! 또한'c => c.Code.StartsWith (c.Code)'를 선택한다고 말하는 것입니다. 이것은 자기와 대조하여 항상 모든 데이터입니다. 찾으려는 c.code를 정의해야합니다. – Armin

+0

자녀가 같은 프로젝트를 공유하지 않습니다. 처음에 나는 그 프로젝트가 'ABC'라는 모든 항목을 쿼리하고 싶습니다. 그런 다음 주 테이블에서 모든 평가 코드를 검색하고 싶습니다. – ibrahim

+0

아래의 업데이트 된 답변은 – Armin

답변

1

.

최소 길이의 코드는 부모라고 가정합니다. 부모를 선택하면 상위 코드로 시작하지만 상위 코드와 길이가 다른 모든 레코드를 가져옵니다.

var result = db.tableA.AsQueryable(); 
var minLength = result.Select(t => t.Code.Length).Min(); 
var tempResult = result.Where(p => p.project.Equals(ProjectValue) && p.Code.Length == minLength); 
result = result.Where(c => tempResult.Any(d => c.Code.StartsWith(d.Code)) && c.assess== 0 && c.project.Equals(ProjectValue) && c.Code.Length != minLength); 
0

당신이 당신의 질문에 준 컨텍스트의 양 지금 내가 생각할 수있는 가장 가까운 것은, 것입니다 끝나게 : 당신은 당신이 아이들과 tempResult의 부모가 있기 때문에 부모가 아닌 상태 StartsWith는 항상 true 될 경우,이 작업을 수행하기 위해있는 기록을 알 필요가

var result = db.tableA.AsQueryable(); 
var tempResult = result.Where(p => p.project.Equals(ProjectValue)).select(p => p.code); 
result = result.Where(c => tempResult.contains(c.Code.substring(0, 4)) && c.assess== 0 && c.project.Equals(ProjectValue)); 
+0

tempResult.contains (c.Code. substring (0, 4))는 c.project.Equals (ProjectValue)가 true 일 때 항상 true가됩니다. –