2011-12-08 3 views
1

Contains ("")에 해당하는 "* "이 있습니까? 필터링에 와일드 카드를 사용하고 있는데 필터가 적용되지 않으면 모두 반환해야합니까?LINQ/Projection - 필터링을위한 모든 와일드 카드가 포함됩니다.

// If the filter is empty get all results...if there is a filter passed the filter values in for select 
db.Products.Where(x => x.ProdId.Contains(filter.Length == 0 ? "*" : filter); 

답변

1

사용이 : 정말 달성하기 위해 필요한 것은

string[] filter = {1,2}; // This is dynamic could be filtered values or {} empty. 

// This works for filtering by products (1,2) 
db.Products.Where(x => filter.Contains(x.ProdId)); 

이 같은 것입니다 필터가 WHERE 조건 만이 아닌 경우

var result = db.Products.AsQueryable(); 

if(filter.Any()) 
    result = result.Where(x => filter.Contains(x.ProdId)); 

, 그 문제에 아니에요 모두, 검색어에 대해 Where을 복수 정의 할 수 있습니다.

var result = db.Products.Where(x => SomeCondition(x)); 

if(filter.Any()) 
    result = result.Where(x => filter.Contains(x.ProdId)); 
+0

Thx 여러 개의 필터 (5 ~ 6 개)가 있으며이를 사용하여 예상 된 진술을 유지하고 싶습니다. : 운영자. – JaJ

+0

@JaJ : 여러 where 문에 대해 설명하는 업데이트를 참조하십시오. –

+0

정말 고마워! – JaJ

3

당신은 필요한 경우는 곳을 추가 할 수 있습니다

var query = db.Products.AsQueryable(); 
if (filter.Any()) 
    query = query.Where(x => filter.Contains(x.ProdId)); 

// use query as needed 
+0

갈대, 답장을 보내 주셔서 감사합니다! 여러 곳에 추가하면 잘 작동합니다! – JaJ

0

db.Products.Where(x => !filter.Any() || filter.Contains(x.ProdId))

내가 다른 목록에 답 좋아하지만 : 첫 번째 예에서

if(filter.Any()) result = result.Where(x => filter.Contains(x.ProdId));

를, 그것은 루프 것 컬렉션을 통해 필터에 결과의 모든 항목에 대한 항목이 있는지 확인하십시오. 두 번째 매개 변수는 필터에 항목이있는 경우에만 반복됩니다.

+0

이것은 작동하지 않습니다. filter가 비어 있으면'filter.Any'는'false'를 리턴하고'filter.Contains (x.ProdId)'는'false'를 리턴합니다. –

+0

필터가 비어 있지 않고 필터에 일치 항목이없는 경우 결과가 반환되지 않을 것으로 예상됩니다. –

+0

맞음. 그러나 필터가 비어 있으면 모든 * 객체가 반환되기를 원합니다. 그러나 구현은 * none *을 반환합니다. –

관련 문제