Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6675161
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 26, 20262026-05-26T03:49:11+00:00 2026-05-26T03:49:11+00:00

I try to build extension method for IQuerable like this: public static IQueryable<T> FilterByString<T>(this

  • 0

I try to build extension method for IQuerable like this:

public static IQueryable<T> FilterByString<T>(this IQueryable<T> query, 
  Expression<Func<T, string>> propertySelector, 
  StringOperator operand, 
  string value)

that will generalize something like this:

query.Where(o => o.Name.ToLower().StartsWith(filterObject.Name.ToLower()))

into:

q.FilterByString(o => o.Name, filterObject.NameOperator, filterObject.Name)

to allow to set filtering operator (i.e. EndsWith, Contains).

I’ve seen on google some solutions to case sensitive filtering that requires using name of the property as a string instead of stron typed propertySelectorExpression. I’ve also seen solution for insensitive Contains() implementation using IndexOf() bu non of them seems to fit my needs.

For now I have this but it is not working (excpetiopn on “ToLower()” call):

static MethodInfo miTL = typeof(String).GetMethod("ToLower", System.Type.EmptyTypes);
static MethodInfo miS = typeof(String).GetMethod("StartsWith", new Type[] { typeof(String) });
static MethodInfo miC = typeof(String).GetMethod("Contains", new Type[] { typeof(String) });
static MethodInfo miE = typeof(String).GetMethod("EndsWith", new Type[] { typeof(String) });

public static IQueryable<T> FilterByString<T>(this IQueryable<T> query, 
  Expression<Func<T, string>> propertySelector, 
  StringOperator operand, 
  string value)
{
    Expression constExp = Expression.Constant(value.ToLower());

    Expression dynamicExpression = null;

    switch (operand)
    {
        case StringOperator.StartsWith:
            dynamicExpression = Expression.Call(propertySelector, miTL);
            dynamicExpression = Expression.Call(dynamicExpression, miS, constExp);
            break;
        case StringOperator.Contains:
            dynamicExpression = Expression.Call(propertySelector, miTL);
            dynamicExpression = Expression.Call(dynamicExpression, miC, constExp);
            break;
        case StringOperator.EndsWith:
            dynamicExpression = Expression.Call(dynamicExpression, miTL);
            dynamicExpression = Expression.Call(dynamicExpression, miE, constExp);
            break;
        default:
            break;
    }

    LambdaExpression pred = Expression.Lambda(dynamicExpression);

    return (IQueryable<T>)query.Provider.CreateQuery(Expression.Call(typeof(Queryable), 
        "Where", new Type[] {query.ElementType}, query.Expression, pred));
}

Any ideas?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-26T03:49:11+00:00Added an answer on May 26, 2026 at 3:49 am

    This should work, even if certainly not complete (nor elegant).

    public static class LinqQueries
    {
        private static MethodInfo miTL = typeof(String).GetMethod("ToLower", Type.EmptyTypes);
        private static MethodInfo miS = typeof(String).GetMethod("StartsWith", new Type[] { typeof(String) });
        private static MethodInfo miC = typeof(String).GetMethod("Contains", new Type[] { typeof(String) });
        private static MethodInfo miE = typeof(String).GetMethod("EndsWith", new Type[] { typeof(String) });
    
        public static IQueryable<T> FilterByString<T>(this IQueryable<T> query,
                                                      Expression<Func<T, string>> propertySelector,
                                                      StringOperator operand,
                                                      string value)
        {
            ParameterExpression parameterExpression = null;
            var memberExpression = GetMemberExpression(propertySelector.Body, out parameterExpression);
            var dynamicExpression = Expression.Call(memberExpression, miTL);
            Expression constExp = Expression.Constant(value.ToLower());
            switch (operand)
            {
                case StringOperator.StartsWith:
                    dynamicExpression = Expression.Call(dynamicExpression, miS, constExp);
                    break;
                case StringOperator.Contains:
                    dynamicExpression = Expression.Call(dynamicExpression, miC, constExp);
                    break;
                case StringOperator.EndsWith:
                    dynamicExpression = Expression.Call(dynamicExpression, miE, constExp);
                    break;
            }
    
            var pred = Expression.Lambda<Func<T, bool>>(dynamicExpression, new[] { parameterExpression });
            return query.Where(pred);
    
        }
    
    
        private static Expression GetMemberExpression(Expression expression, out ParameterExpression parameterExpression)
        {
            parameterExpression = null;
            if (expression is MemberExpression)
            {
                var memberExpression = expression as MemberExpression;
                while (!(memberExpression.Expression is ParameterExpression))
                    memberExpression = memberExpression.Expression as MemberExpression;
                parameterExpression = memberExpression.Expression as ParameterExpression;
                return expression as MemberExpression;
            }
            if (expression is MethodCallExpression)
            {
                var methodCallExpression = expression as MethodCallExpression;
                parameterExpression = methodCallExpression.Object as ParameterExpression;
                return methodCallExpression;
            }
            return null;
        }
    
    }
    

    Will manage

    xxx.FilterByString(m => m.Name,...)
    xxx.FilterByString(m => m.Test.Name,...)
    xxx.FilterByString(m => m.GetValue(),...)//GetValue() returns "string"
    

    CAUTION : NullReferenceExceptions aren’t managed (if Name is null, or Test is null, or Test.Name is null, or GetValue() returns null)…

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I am getting this error when I try to build for the device: Code
I'm trying to build an extension for Firefox. This extension uses an XPCOM component
I try to build a gui (Swing) for a simple java application. The application
i try to build a app that is in landsscape mode all the time.
When I try to build my project I get the following message in the
When I try to build my projects in Visual Studio 2008, web sites won't
When I try to build a project in Visual Studio 2005 that has a
Sometimes when i try to build/compile a downloaded source, i get following warning: ld:
I'm getting an error message when I try to build my project in eclipse:
I've included: #import QuartzCore/QuartzCore.h but when I try to build, I get the error

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.