冗长的LINQ查询破坏了SQLite解析器-简化吗?

| 我正在使用C#和LINQ对搜索SQLite数据库进行编程。 搜索的想法是,您可以提供一个或多个关键字,任何关键字都必须包含在多个列条目中的任何一个中,才能将该行添加到结果中。 该实现由几个linq查询组成,所有linq查询都通过联合放在一起。这样必须考虑更多的关键字和列,从而导致更复杂的查询。这可能会导致产生SQL代码,这对于SQLite解析器来说是很长的。 以下是一些示例代码来说明:
IQueryable<Reference> query = null;

if (searchAuthor)
    foreach (string w in words)
    {
        string word = w;

        var result = from r in _dbConnection.GetTable<Reference>()
                     where r.ReferenceAuthor.Any(a => a.Person.LastName.Contains(word) || a.Person.FirstName.Contains(word))
                     orderby r.Title
                     select r;

         query = query == null ? result : query.Union(result);
    }

if (searchTitle)
    foreach (string word in words)
    {
        var result = from r in _dbConnection.GetTable<Reference>()
                     where r.Title.Contains(word)
                     orderby r.Title
                     select r;

        query = query == null ? result : query.Union(result);
    }

//...
有没有一种方法可以以更紧凑的SQL形式构造查询? 我试图通过在每个循环后在查询上调用GetEnumerator()来强制创建较小的SQL语句。但是显然Union()不会对数据进行操作,而是对底层的LINQ / SQL语句进行操作,因此无论如何我都生成了长语句。 我现在唯一想到的解决方案是,在每个“子查询”之后真正地收集数据,并对实际数据进行合并,而不是在语句中进行合并。有任何想法吗?     
已邀请:
对于类似的事情,您可能想要使用PredicateBuilder,如对该问题的选择答案所示。     

要回复问题请先登录注册