2014-05-19 2 views
0

나는 모든 선택된 범주를 만족하는 것만을 선택하기 위해 (메모리에서) 많은 수의 객체를 걸러 낼 필요가있다. 복합 필터 용 Lambda 또는 LINQ?

은 본질적으로 내가 복제 찾고 있어요 SQL 쿼리,하지만 난 좋은 C#을 대안을 마련하지 못하고했습니다

select distinct o.ObjectId 
from Object o 
join ObjectCategories oc on oc.ObjectId = o.ObjectId 
where oc.CategoryId in (1) 
and oc.CategoryId in (2) 
and oc.CategoryId in (3) 
... and so on... 

... 1, 2, 3 대표 불확실한 수의 사용자 선택 카테고리의 값.

답변

0

사용자가 목록에서 선택한 카테고리 ID를 가지고 다음을 포함 할 수 있습니다.

select distinct o.ObjectId 
from Object o 
join ObjectCategories oc on oc.ObjectId = o.ObjectId 
where yourCategoryList.Contains(oc=>oc.categoryID); 
+0

(가) 어떤이있는 경우에는 메소드가 true를 반환합니다()이 들어 있습니다. 나는 모든 존재를 필요로한다. –

0
var results = ObjectCategories.Where(t2 => ObjectList.Any(t1 => t2.Contains(t1)) == true) 

당신은 일치의 수를 셀 수 그것은 당신이에 대해 확인 된 목록 동일한 경우, 당신은 모든 경기가 있습니다.

0

동적 LINQ 사용을 고려하십시오. 람다 식 대신 문자열 식을 사용할 수 있습니다. 여기에 동적 LINQ의 꽤 고체 실현하는 것이이있다

var qry = ObjectCategories.Where( 
    "ObjectList.CategoryId.Contains(1) AND ObjectList.CategoryId.Contains(2) ..." 
); 

: 당신은 당신이 비슷한을 사용하여 원하는 것을 할 수 있어야 https://github.com/NArnott/System.Linq.Dynamic