쿼리를 실행하고 Linq에서 엔터티 쿼리에이 필터를 기반으로 결과를 반환해야하는 CustomerFilter 개체의 배열을 통해 응용 프로그램에 전달되는 필터 조건이 있다고 가정 해보십시오.여러 수준 where 절을 Linq로 필터링
그래서이 경우 고객은 나를 서비스 호출을 통해 CustomerFilter 객체의 배열로 전달하게됩니다.
필터 개체 :
class CustomerFilter
{
public string CustomerID;
public int[] LocationID;
}
예 데이터 :
CustomerID LocationID
1 1
2
3
4
2 2
3
4
내가 다음과 같이 아주 쉽게 외부의 CustomerID에 대한 쿼리 필터링을 구축 할 수 있습니다.
검색어 :
public void GetCustomerResults(List<CustomerFilter> accounts)
{
List<string> customer = (from a in accounts select a.CustomerID).ToList();
var locations = ctx.Portal_SurveyLocations
.Where(w => customer.Contains(w.CustNum))
.OrderBy(o => o.LocationKey);
}
그래서 내가 외부 기준으로 필터링 할 수 있지만 각 CustomerID를위한 여러 위치 ID를 기준으로 필터링하는 방법을 잘 모르겠습니다. 분명히 OR 절을 넣으면 위치 ID가 일치하는 다른 CustomerID를 가져 오므로 잘못된 결과가 나타납니다.
CustomerFilter 객체가 전달되면이 다중 레벨 필터를 수행하는 방법에 대한 아이디어가 있습니까?
LocationID.Any에있는 lamba 표현식의 범위 문제로 인해 컴파일되지 않습니다. 'w'라는 로컬 변수는이 범위에서 선언 할 수 없습니다. 왜냐하면 ' w '는 이미 무언가를 나타 내기 위해'부모 또는 현재 '범위에 사용됩니다. –
@mattytommo 두 가지 다른 범위에서'w' 변수를 사용하려고 했으므로 코드를 조정했습니다 :'Where' lambda와'a.LocationID.Any'도 포함되어 있으므로 @ PhilMurray의 컴파일러 오류가 발생했습니다. 나는 이것이 문제를 해결해야한다고 생각한다. – IronMan84
@ IronMan84 토니 스탁 (Tony Stark), 고마워, 고마워. – mattytommo