누구든지 Linq.Dynamic 네임 스페이스에 익숙하다면 도움이 될 수 있습니다. 인터넷에서 충분한 리소스를 찾을 수 없습니다. QueryFilter 내가 유형이 컴파일 타임에 알 수없는 수식을 만듭니다 DynamicExpression.ParseLambda을 사용하고 기본적으로알 수없는 유형의 DynamicExpression 실행
,
public Expression GetExpression(Type t, List<QueryFilter> filters)
{
// pseudo code
// extracts a string representation of the query as 'expressionString'
return DynamicExpression.ParseLambda(t, typeof(Boolean), expressionString, values);
}
인 경우 : 간단한 바이너리를 나타냅니다
public class QueryFilter
{
string propertyName;
ExpressionType operationType;
object value;
}
기능은 "Age> 15"또는 그와 비슷한 것입니다.
이것은 'GetExpression'기능이 작동하는 방식으로 입력 유형과 출력 유형 인 두 가지 유형이 필요하며 일반적으로 Func 대리인을 사용하여 일반적으로 생성되는 것을 생성합니다. 또한 쿼리를 나타내는 문자열과 위의 'expressionString'및 'values'값인 params 객체 []를 사용합니다.
그러나 SqlMetal (.dbmc 파일)에서 생성 된 DataContext를 사용하여 LINQ-to-SQL에서 동적 표현식을 실행하는 데 문제가 있습니다.
DatabaseContext db = new DatabaseContext(connectionString);
var filter = DynamicExpressionBuilder.
GetExpression(typeof(SysEventLogT), sysEventFilters)
var query = db.SysEventLogT.Where(filter);
다음과 같은 오류를 생성,
System.Data.Linq.Table<DBReporting.Linq.Data.SysEventLogT>
는 '어디'에 대한 정의 및
System.Linq.Dynamic.DynamicQueryable.Where<T>(System.Linq.IQueryable<T>, string, params object[])
일부 잘못된 인수가 최고의 확장 메서드 오버로드를 포함하지 않습니다.
내 DataContext 인스턴스가 실제로 SQL 테이블을 속성으로 취급한다는 것을 알고 있습니다 ... GetProperty()를 사용하여이를 반영해야합니까? 또는 다른 것을 만들 필요가 있습니다. 어디서 확장합니까?