구글링을 열심히 한 결과, stackoverflow.com에서 답을 찾았네요.
PredicateBuilder 클래스를 활용하라는 답이 가장 호응이 좋았는데요.
아래 O'Reilly에서 나온 C# 3.0 IN A NUTSHELL 사이트의 어떤 페이지로 이끌더군요.
원문은 그곳을 참조하시면 됩니다.
Dynamically Composing Expression Predicates
자신의 프로젝트에 아래와 같이 PredicateBuilder 클래스를 추가하고,
사용은 다음과 같이 합니다.
검색 조건이 다양할 때 조건문과 함께 사용하면 더 빛을 발하겠습니다!
'얼렁뚱땅은 싫다 자세히 이해하고 싶다!'는 분은 위에 소개한 원문 링크를 따라 들어가 보시면,
유익한 정보가 있습니다.
LINQ Query 연습할 때 사용하면 좋은 LINQPad도 소개되어 있으니 참고하세요.
PredicateBuilder 클래스를 활용하라는 답이 가장 호응이 좋았는데요.
아래 O'Reilly에서 나온 C# 3.0 IN A NUTSHELL 사이트의 어떤 페이지로 이끌더군요.
원문은 그곳을 참조하시면 됩니다.
Dynamically Composing Expression Predicates
자신의 프로젝트에 아래와 같이 PredicateBuilder 클래스를 추가하고,
using System;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;
public static class PredicateBuilder
{
public static Expression> True () { return f => true; }
public static Expression> False () { return f => false; }
public static Expression> Or (this Expression> expr1,
Expression> expr2)
{
var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast ());
return Expression.Lambda>
(Expression.OrElse (expr1.Body, invokedExpr), expr1.Parameters);
}
public static Expression> And (this Expression> expr1,
Expression> expr2)
{
var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast ());
return Expression.Lambda>
(Expression.AndAlso (expr1.Body, invokedExpr), expr1.Parameters);
}
}
사용은 다음과 같이 합니다.
IQueryableSearchProducts (params string[] keywords) { var predicate = PredicateBuilder.False (); foreach (string keyword in keywords) { string temp = keyword; predicate = predicate.Or (p => p.Description.Contains (temp)); } return dataContext.Products.Where (predicate); }
검색 조건이 다양할 때 조건문과 함께 사용하면 더 빛을 발하겠습니다!
'얼렁뚱땅은 싫다 자세히 이해하고 싶다!'는 분은 위에 소개한 원문 링크를 따라 들어가 보시면,
유익한 정보가 있습니다.
LINQ Query 연습할 때 사용하면 좋은 LINQPad도 소개되어 있으니 참고하세요.
Trackback 0 And
Comment 4






