开发者

Longish LINQ query breakes SQLite-parser - simplify?

I'm programming a search for a SQLite-database using C# and LINQ. The idea of the search is, that you can provide one or more keywords, any of which must be contained in any of several column-entries for that row to be added to 开发者_JAVA技巧the results. The implementation consists of several linq-queries which are all put together by union. More keywords and columns that have to be considered result in a more complicated query that way. This can lead to SQL-code, which is to long for the SQLite-parser.

Here is some sample code to illustrate:

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);
    }

//...

Is there a way to structure the query in a way that results in more compact SQL? I tried to force the creation of smaller SQL-statments by calling GetEnumerator() on the query after every loop. But apparently Union() doesn't operate on data, but on the underlying LINQ/SQL statement, so I was generating to long statements regardless.

The only solution I can think of right now, is to really gather the data after every "sub-query" and doing a union on the actual data and not in the statement. Any ideas?


For something like that, you might want to use a PredicateBuilder, as shown in the chosen answer to this question.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜