전 마스터 테이블이 있어야합니다. 프로세스. 프로세스에는 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)
에 필요한 경우 확실하지 않다 : 그것은과 보조 테이블에있는 경우
's.Movements'를 포함시킨 후에도'Movements '가 아니라'Where'에있는'db.Processes'에 여전히 필터링 중입니다. 또한 왜 db.Processes 변수에'p' 대신's'를 사용하고 있습니까? – NetMage
또한 '포함'을 사용할 때 와일드 카드 문자를 사용하지 않습니다. 추신 : LINQPad를 사용해 보셨습니까? – NetMage
감사합니다. Movements를 포함시킬 수 있었고 와일드 카드 문자를 제거했습니다. 잘 했어. 그러나 여전히 반환해야하는 이유를 이해하지 못합니다. "이 명령과 관련된 열려있는 DataReader가 이미 있으므로 먼저 닫아야합니다." 두 개의 검색 매개 변수를 실행하려고 할 때 – Neumann