Tôi có một phương pháp mở rộng LINQ để tự động lọc LINQ truy vấn bằng cách sử dụng các giá trị chuỗi. Ví dụ: query.WhereHelper("columName", ">", 1)
. Tôi có thể sử dụng nhiều toán tử lọc khác nhau như GreaterThan hoặc NotEqual, v.v. nhưng không phải là "Thích". Không có Expression.Like hoặc Expression.StartsWith vv Làm thế nào tôi có thể thực hiện giống như nhà điều hành cây Expression của tôi? Dưới đây là mã của tôi:Giống như toán tử trong Expression Tree
public static IQueryable<T> WhereHelper<T>(this IQueryable<T> source, string columnName, object value, string filterType)
{
ParameterExpression table = Expression.Parameter(typeof(T), "");
Expression column = Expression.PropertyOrField(table, columnName);
Expression valueExpression = Expression.Convert(Expression.Constant(value), column.Type);
Expression where = null;
switch (filterType)
{
case "<":
where = Expression.LessThan(column, valueExpression);
break;
case "<=":
where = Expression.LessThanOrEqual(column, valueExpression);
break;
case "=":
where = Expression.Equal(column, valueExpression);
break;
case ">":
where = Expression.GreaterThan(column, valueExpression;
break;
case ">=":
where = Expression.GreaterThanOrEqual(column, valueExpression);
break;
case "<>":
where = Expression.NotEqual(column, valueExpression);
break;
}
Expression lambda = Expression.Lambda(where, new ParameterExpression[] { table });
Type[] exprArgTypes = { source.ElementType };
MethodCallExpression methodCall = Expression.Call(typeof(Queryable),
"Where",
exprArgTypes,
source.Expression,
lambda);
return (IQueryable<T>)source.Provider.CreateQuery<T>(methodCall);
Các "chức năng helper" Ý tôi là là [ 'SqlMethods'] (http://msdn.microsoft.com/en-us/library/system. data.linq.sqlclient.sqlmethods.aspx) - cụ thể là 'Like()' –
Nhận xét về EF không chính xác. Có [EntityFunctions] (http://msdn.microsoft.com/en-us/library/system.data.objects.entityfunctions.aspx) mà là analagous để 'SqlMethods' cho L2S. Tuy nhiên, các chức năng như 'EndsWith' và' Contains' được hỗ trợ nguyên bản trong EF và không yêu cầu những người trợ giúp như vậy. –
@Xin ơn cảm ơn; Tôi không biết về điều đó. –