전자 메일 주소의 배열로 전달되고 각 전자 메일 주소에 대해 해당 전자 메일 주소와 관련된 멤버의 numTotal 및 numActive를 반환해야합니다.목록에서 LINQ로 전달할 때 단일 데이터베이스 호출
전통적으로 구성원 테이블에서 쿼리하고 전달 된 전자 메일 배열에 구성원의 전자 메일 주소가있는 곳을 필터링합니다. 그러나 이것은 회원 테이블에있는 전자 메일의 개수가 포함 된 전자 메일 주소 목록 만 반환합니다. 대신 회원에게 이메일 주소가 있는지에 관계없이 제공되는 각 이메일 주소에 대한 기록이 필요합니다.
내 솔루션은 이메일 배열을 반복 한 다음 하위 쿼리를 수행하는 것입니다. 이 작업을하고 필요한 정보를 얻을 수 있지만 전화를 프로파일 링 할 때 EF가 각 전자 메일 주소/하위 쿼리에 대해 별도의 쿼리를 실행하고 있음을 알았습니다.
var result = (from email in emailAddresses
select new EmailAddressStats {
Total = membersQueryable.Any(m => m.Email == email),
Active = membersQueryable.Any(m => m.Email == email && m.IsActive)
}).ToList();
그래서 3 개의 이메일 주소를 전달하면 6 개의 별도 쿼리 (3 개의 이메일 주소 * 2 개의 하위 쿼리)가 표시됩니다.
배열을 .AsQueryable()
을 사용하여 쿼리 가능하게 만들려고했으나 여전히 동일한 결과가 나타납니다.
SELECT ([totalSubquery]) AS Total,
([activeSubquery]) AS Active
FROM ????
WHERE EXISTS ('[email protected]', '[email protected]', '[email protected]')
참고 :
이상적으로는 EF 같은 것을 생성하고 싶습니다 내가 4.
가 나는 문제를 이해한다면 모르겠지만, 나오지 않았어 (이 대신 쿼리 식 구문의 유창함 문법에 있지만 난 단지 유창함 구문에서이 작업을 수행하는 방법을 알고 죄송합니다) 그걸 위해서'JOIN'을 사용하지 않습니까? '맞다. 나는 맞 읍시다. –