C# 如何在Lambda中搜索表的所有字段

C# 如何在Lambda中搜索表的所有字段,c#,asp.net-mvc,lambda,C#,Asp.net Mvc,Lambda,这是一个ASP.NET MVC项目。 我想从视图中查询具有文本框特定值的数据库表。 这将查询两个字段: public ActionResult Index(string search) { return View(db.KDtable .Where(x => x.Name.StartsWith(search) || x.Description.StartsWith(s

这是一个ASP.NET MVC项目。 我想从视图中查询具有文本框特定值的数据库表。 这将查询两个字段:

public ActionResult Index(string search)
{
    return View(db.KDtable
                  .Where(x =>
                    x.Name.StartsWith(search)
                    || x.Description.StartsWith(search)
                    || search == null)
                  .ToList()
                );
}
字符串搜索
是文本框的值

问题:

我怎样才能不用手动将所有字段添加到lambda表达式中,例如
x.City.StartsWith(search)
,只需使用文本框中的输入简单地查询所有表字段

Thx

试试这个:

public static Expression<Func<T,bool>> CreateTextSearch<T>(string searchText)
{
    Type t = typeof(T);
    var props = t.GetProperties().Cast<PropertyInfo>().Where(p => p.PropertyType == typeof(string));

    var searchTextExpr = Expression.Constant(searchText);
    var tParameterExpr = Expression.Parameter(typeof(T));

    Expression expr = null;
    foreach(var prop in props)
    {
        var criteria = Expression.Call(
            Expression.Property(tParameterExpr, prop),
            typeof(string).GetMethod("StartsWith", new Type[] { typeof(string) }),
            searchTextExpr);
        if(expr == null)
            expr = criteria;
        else
            expr = Expression.Or(expr, criteria);
    }
    return Expression.Lambda<Func<T,bool>>(expr, tParameterExpr);
}
公共静态表达式CreateTextSearch(字符串搜索文本)
{
类型t=类型(t);
var props=t.GetProperties().Cast(),其中(p=>p.PropertyType==typeof(string));
var searchTextExpr=Expression.Constant(searchText);
var tParameterExpr=表达式.参数(类型(T));
表达式expr=null;
foreach(道具中的var道具)
{
var-criteria=Expression.Call(
Expression.Property(tParameterExpr,prop),
typeof(string).GetMethod(“StartsWith”,新类型[]{typeof(string)}),
searchTextExpr);
if(expr==null)
expr=标准;
其他的
expr=表达式或(expr,标准);
}
返回表达式.Lambda(expr,tParameterExpr);
}

可以这样称呼它:
MySet.Where(CreateTextSearch(“DDD”)用于IQueryables和MySet.Where(CreateTextSearch(“DDD”).Compile())用于常规IEnumerables。

您需要动态linq。在Dynamic Linq旁边看一看,您可能想看看这个