2015-01-17 4 views
1

나는 동적 Linq Where 절을 여러 개 만들려합니다.동적 linq 빌드 체크 박스에서 어디

차량 : 자동차, SUV, 트럭

컬러하지 & &의

예 - 사용자에 따라 (관찰 보고서)는, 체크 박스를 내가 ||들로 내 필터를 필요

을 확인 : 블랙, 블루, 실버, 화이트

엔진 : V4, V6, V8

var query = from v in vehicles 
      where 
       (v.Vehicle == "Car" && v.Color == "Blue") 
       || (v.Vehicle == "Truck" && v.Engine == "V8") 
       || (v.Vehicle == "Car" && v.Engine == "V4") 
      select v; 

|| 함께 여러 필터를 만들거나 추가하려면 어떻게합니까? 운영자?

내가 ScottGu과 PredicateBuilder 보았다 ...하지만 다음 두 줄을 사용하여 내가 여전히 작동 구문을 사용 Linq에

+0

가 조회 할 수행 너의 DB? 술어 연결에 대한 귀하의 현재 견해는 무엇입니까? – user3411327

답변

0

을 배우고

을 작동하도록하는 방법이 작업을 수행 할 수 알아낼 수 없었다 :

var CheckedColors = this.Controls.OfType<CheckBox>().Where(c => c.Checked).Select(c => c.Text).ToArray(); 
var CheckedVehicles = vehicles.Where(v => CheckedColors.Contains(v)); 

위의 코드는 체크 박스가 당신에 대해 질의하고있는 색상과 동일한 Text 있다고 가정합니다. 동일한 논리를 확장하여 엔진 유형을 쿼리 할 수도 있습니다.

설명 : 첫 번째 줄은 양식의 모든 확인란을 필터링 한 다음 선택한 각 확인란의 Text 속성을 투영합니다. 그런 다음 두 번째 줄은 그 목록에있는 차량을 걸러냅니다.

1

술어의 배열을 만듭니다. 배열의 내용을 관리하고 다음과 같이 사용 등 파란 차, V8 트럭 또는 V4 자동차, : 각 술어는 특정 조건을 확인

코드 어딘가에
delegate bool CheckVehicle(dynamic v); // predicate template 

private static bool CheckCarBlue(dynamic v) 
{ 
    return v.Vehicle == "Car" && v.Color == "Blue"; 
} 

private static bool CheckTruckV8(dynamic v) 
{ 
    return v.Vehicle == "Truck" && v.Engine == "V8"; 
} 

private static bool CheckCarV4(dynamic v) 
{ 
    return v.Vehicle == "Car" && v.Engine == "V4"; 
} 

:

List<CheckVehicle> checks = new List<CheckVehicle>(); 
checks.Add(CheckCarBlue); 
checks.Add(CheckTruckV8); 
checks.Add(CheckCarV4); 

var Q = from v in vehicles 
     where checks.Any<CheckVehicle>(p => p(v)) 
     select v;