簡體   English   中英

按字符串字段名稱搜索

[英]Search by string field name

我需要建立按字符串字段名稱搜索。

例如此代碼:

SearchProvider.Search(records, "First", "S2");

應等於:

SearchProvider.Search(records, x => x.First, "S2");

問題:將字符串轉換為Linq lambda表達式。

我該怎么做?

您應該使用Expression.Lambda將字符串轉換為lambda表達式,例如:

public IQueryable<TModel> Search<TModel>(IQueryable<TModel> model, string selector, string searchFor)
{
    var param = Expression.Parameter(typeof(TModel), "x");
        var contains = Expression.Call(
            Expression.PropertyOrField(param, selector),
            "Contains", null, Expression.Constant(searchFor)
        );
        var predicate = Expression.Lambda<Func<TModel, bool>>(contains, param);

        model = model.Where(predicate);
    return model;
}

接下來,為了公平搜索,您應該做兩件事:

  • 搜索任何對象,而不僅僅是字符串。
  • 放低所有弦。

這是示例:

public IQueryable<TModel> Search<TModel>(IQueryable<TModel> model, string selector, object searchFor)
{
    var param = Expression.Parameter(typeof(TModel), "x");
    var tostring = Expression.Call(
        Expression.PropertyOrField(param, selector),
        "ToString", null, null
        );
    var tolower = Expression.Call(
        tostring,
        "ToLower", null, null
        );
    var contains = Expression.Call(
        tolower,
        "Contains", null, Expression.Constant(searchFor)
                );
    var predicate = Expression.Lambda<Func<TModel, bool>>(contains, param);

    model = model.Where(predicate);

        return model;
}

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM