динамический linq содержит - PullRequest
1 голос
/ 16 сентября 2009

Я ищу динамический метод linq-to-sql Contains (StartsWith / EndsWith).

Я пробовал следующий код, но он не работал.

Есть идеи?

public static IQueryable<T> WhereContains<T, V>(this IQueryable<T> queryable, string propertyName, V propertyValue)
{
    ParameterExpression pe = Expression.Parameter(typeof(T), "p");
    Expression left = Expression.Property(pe, propertyName);
    Expression right = Expression.Constant(propertyValue, typeof(V));

    IQueryable<T> x = queryable.Where<T>(
        Expression.Lambda<Func<T, bool>>(
            Expression.Call(
                typeof(T).GetMethod("Contains"),
                left,
                right),
            new ParameterExpression[] { pe }));

    return x;
}

1 Ответ

1 голос
/ 16 сентября 2009

LINQ-to-SQL знает, как переводить StartsWith, EndsWith и Contains для строк.

Например:

View.Customers = from c in db.Customers
                 where c.ContactName.EndsWith("c")
                 orderby c.CompanyName
                 select c;

Ссылка: http://davidhayden.com/blog/dave/archive/2007/11/23/LINQToSQLLIKEOperatorGeneratingLIKESQLServer.aspx

Если вы пытаетесь создать что-то вроде стиля отражения, у которого есть метод Contains, который принимает два параметра, вам будет сложнее ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...