C# 从列表中获取表达式<;表达式<;Func<;TEntity,bool>&燃气轮机&燃气轮机;

C# 从列表中获取表达式<;表达式<;Func<;TEntity,bool>&燃气轮机&燃气轮机;,c#,entity-framework,C#,Entity Framework,我在为基于EF6的web应用程序动态生成谓词的函数方面遇到了问题 我需要将此类型传递到已存在的函数中: 表达式 这是为了搜索,所以我需要根据搜索中的字段和搜索词构建查询。我尝试了下面的方法,但无法使其成为动态的,它始终包含所有搜索词,无论搜索词是否存在,在下面的示例中,我始终希望在字段1中搜索searchTerm1,但仅在存在值的情况下执行searchTerm2部分,但无论如何,EF查询都包含了查询的这一部分,因此搜索速度较慢 Expression<Func<MyModelType,

我在为基于EF6的web应用程序动态生成谓词的函数方面遇到了问题

我需要将此类型传递到已存在的函数中:

表达式

这是为了搜索,所以我需要根据搜索中的字段和搜索词构建查询。我尝试了下面的方法,但无法使其成为动态的,它始终包含所有搜索词,无论搜索词是否存在,在下面的示例中,我始终希望在字段1中搜索searchTerm1,但仅在存在值的情况下执行searchTerm2部分,但无论如何,EF查询都包含了查询的这一部分,因此搜索速度较慢

Expression<Func<MyModelType, bool>> predicates = null;

predicates = (
        p => (
        p.Field1.ToString().ToLower() == (searchTerm1.ToLower())
        )
        &&
        (string.IsNullOrEmpty(searchTerm2) || (
        p.Field1.ToString().Contains(searchTerm2)
        ||
        p.Field2.ToString().Contains(searchTerm2.ToLower())))
);
etc etc只是一种控制表达式查询中是什么和不是什么的方法。
我已经创建了一个
表达式列表
,但我无法将其转换为一个表达式传递给我的函数。

搜索
PredicateBuilder
并应用。谢谢你,这是一个很大的帮助!
If(!string.IsNullOrEmpty(searchTerm1))
query.Add(q=>q.FieldX.Equals(searchTerm1)

If(!string.IsNullOrEmpty(searchTerm2))
query.Add(q=>q.FieldCountry.Equals(searchTerm2)

If(!string.IsNullOrEmpty(searchTerm3))
query.Add(q=>q.Keywords.Contains(searchTerm3)