C# 如何创建具有未知字段的lambda表达式?

C# 如何创建具有未知字段的lambda表达式?,c#,.net,entity-framework,dynamic,lambda,C#,.net,Entity Framework,Dynamic,Lambda,我想动态地构建lambda表达式,这样我就可以构建一个具有未知字段数的查询……我该如何实现这一点 我在一个对象中循环,该对象包含所有字段和值,并为每个字段添加Where子句 searcher = searcher.Where(f => f.fieldName.Contains(fieldValue)); i、 e.伪代码: foreach(var field in fields){ searcher = searcher.Where(f => field.name.Cont

我想动态地构建lambda表达式,这样我就可以构建一个具有未知字段数的查询……我该如何实现这一点

我在一个对象中循环,该对象包含所有字段和值,并为每个字段添加Where子句

searcher = searcher.Where(f => f.fieldName.Contains(fieldValue));
i、 e.伪代码:

foreach(var field in fields){
    searcher = searcher.Where(f => field.name.Contains(field.value));
}
如果我生活在石器时代,我会像这样对它进行伪编码:

var first = true;
string query = " SELECT * FROM TABLE WHERE ";
foreach(var field in fields){
    if(first){
        query += field.name + " LIKE '%" + field.value + "%' ";
    }else{
        query += " AND " + field.name + " LIKE '%" + field.value + "%' ";
    }

    first = false;
}

请告诉我石器时代并不比现在的技术更强大

我希望这会有所帮助

searcher = fields.Aggregate(searcher, (current, field) => current.Where(f => f.Name.Contains(f.Value)));

您需要构建一个表达式树。这不是EF的目的;这并不特别容易。石器时代很容易受到sql注入的影响;)您需要引入一个具有getter和setter函数的字段概念。然后为类的每个属性创建一个字段。然后将所有字段放入列表中。使用这样的字段列表抽象对象,可以在不知道对象结构的情况下运行查询、复制、比较等操作。关于它的所有知识都将通过字段进行抽象。谢谢您的评论。我认为EF遗漏了一个非常重要的特性;-)。