从列表中获取表达式<表达式<func <tentity,bool>&gt;&gt; </expression <func <tentity,bool>

时间:2014-07-21 03:50:46

标签: c# entity-framework

我遇到了为基于EF6的Web应用程序动态生成谓词的函数时出现问题。

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

Expression<Func<MyModelType, bool>>

这是一个搜索,所以我需要根据搜索的哪些字段和搜索字词构建查询。我尝试了以下但我不能让它变得动态,它总是包括所有搜索术语,无论是否存在搜索词,例如下面我总是想在Field1中搜索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())))
);

我希望它能以这样的方式完成:

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)

等等只是一种在表达式查询中具有和不存在的方式。 我创建了一个Expression<Func<MyEntity,bool>>的列表,但我无法将其转换为单个表达式以传递给我的函数。

0 个答案:

没有答案