动态linq包含

时间:2009-09-16 14:58:42

标签: sql linq linq-to-sql linq-to-entities

我搜索动态linq-to-sql包含(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 个答案:

答案 0 :(得分:1)

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

如果你试图实现某种反射风格的任何包含两个参数的包含方法,你将会有更难的时间......