2017-09-08 1 views
0

전 마스터 테이블이 있어야합니다. 프로세스. 프로세스에는 Movements라는 세부 하위 테이블이 있습니다. Movement의 판별 자 이름은 Distribution입니다. 그리고 Number라는 필드가 있습니다. Movements-> Distribution-> Number와 같이 '% 123 %'와 같은 프로세스를 필터링해야합니다.상속 내역 테이블에서 필드 별 마스터 필터링

IEnumerable<Process> filtereds = db.Processes 
       .Include(s => s.Movements) 
       .Where(sm => sm.Number.Contains("%123%")) 

나는 번호가 존재하지 않음을 경고했다 :와

나는 시도했다. Number는 Movement의 하위 Distribution of Field이기 때문에 생각합니다.

그때 나는 시도했다 : 나는 유통이 상황에서 유효하지 않습니다 있다고 경고했다

IEnumerable<Process> filtereds = db.Processes 
        .Include(s => s.Movements) 
        .OfType(Distribution) 
        .Where(sm => sm.Number.Contains("%123%")) 

.

은 그럼 내가 발견

IEnumerable<Process> filtereds = db.Processes 
         .Include(s => s.Movements) 
         .OfType<Distribution>() 
         .Any(c => c.Number.Contains("123"))); 

을하지만이 필터 매개 변수와 함께 실행하면

IEnumerable<Process> filtereds = db.Processes 
.Include(c => c.Customers 
.Include(s => s.Movements) 

filtereds = filtereds 
.Where(sc => sc.Movements.OfType<Distribution>().Any(c => c.Number.Contains(model.Nbr))); 

filtereds = filtereds 
.Where(sc => sc.Customer.Any(cl => cl.Customer.Name.Contains(model.Customer))); 

첫 번째가 제대로 실행됩니다. 두 번째 반환 : "이 명령과 관련된 열린 DataReader가 이미 있습니다. 먼저 닫아야합니다."

db.Processes 
.Include(p => p.Movements.Distribution) 
.Where(p => p.Movements.Any(pm => pm.Distribution.Any(pmd => pmd.Number.Contains("123"))) 

내가 먼저 Include(p => p.Movements)에 필요한 경우 확실하지 않다 : 그것은과 보조 테이블에있는 경우

+0

's.Movements'를 포함시킨 후에도'Movements '가 아니라'Where'에있는'db.Processes'에 여전히 필터링 중입니다. 또한 왜 db.Processes 변수에'p' 대신's'를 사용하고 있습니까? – NetMage

+0

또한 '포함'을 사용할 때 와일드 카드 문자를 사용하지 않습니다. 추신 : LINQPad를 사용해 보셨습니까? – NetMage

+0

감사합니다. Movements를 포함시킬 수 있었고 와일드 카드 문자를 제거했습니다. 잘 했어. 그러나 여전히 반환해야하는 이유를 이해하지 못합니다. "이 명령과 관련된 열려있는 DataReader가 이미 있으므로 먼저 닫아야합니다." 두 개의 검색 매개 변수를 실행하려고 할 때 – Neumann

답변

0

당신은 Distribution을 포함 할 수 있어야한다.

+0

좋습니다. 나는 그것을 사용할 수 있는지 몰랐다. 그러나 여전히 반환해야하는 이유를 이해하지 못합니다. "이 명령과 관련된 열려있는 DataReader가 이미 있으므로 먼저 닫아야합니다." 두 개의 검색 매개 변수를 실행하려고 할 때 – Neumann