I had the following Database-Querry:
<code>var task = Task.Run(() => _localDatabase.Table<ArticleData>().Where(article =>
article.ArticleName!.ToLower().Contains(searchQuery.ToLower()))
.Skip(startIndex ?? 0).Take(requestedNumberOfItems ?? 5).ToList());
</code>
<code>var task = Task.Run(() => _localDatabase.Table<ArticleData>().Where(article =>
article.ArticleName!.ToLower().Contains(searchQuery.ToLower()))
.Skip(startIndex ?? 0).Take(requestedNumberOfItems ?? 5).ToList());
</code>
var task = Task.Run(() => _localDatabase.Table<ArticleData>().Where(article =>
article.ArticleName!.ToLower().Contains(searchQuery.ToLower()))
.Skip(startIndex ?? 0).Take(requestedNumberOfItems ?? 5).ToList());
Which had the disadvantage, that the text that has been searched had to be part of the Article-Name. But Sometimes, users only enter parts of words (Article Name is Spider-Man: Across the Spider-Verse
and Users search for man
and verse
). So I split the search quarry in individual parts:
<code>string[] splitQuerry = searchQuery.Split(' ');
</code>
<code>string[] splitQuerry = searchQuery.Split(' ');
</code>
string[] splitQuerry = searchQuery.Split(' ');
And tried to search for the individual parts:
<code>var task = Task.Run(() => _localDatabase.Table<ArticleData>().Where(article =>
splitQuerry.All<string>(querryPart => article.ArticleName!.Contains(querryPart)))
.Skip(startIndex ?? 0).Take(requestedNumberOfItems ?? 5).ToList());
</code>
<code>var task = Task.Run(() => _localDatabase.Table<ArticleData>().Where(article =>
splitQuerry.All<string>(querryPart => article.ArticleName!.Contains(querryPart)))
.Skip(startIndex ?? 0).Take(requestedNumberOfItems ?? 5).ToList());
</code>
var task = Task.Run(() => _localDatabase.Table<ArticleData>().Where(article =>
splitQuerry.All<string>(querryPart => article.ArticleName!.Contains(querryPart)))
.Skip(startIndex ?? 0).Take(requestedNumberOfItems ?? 5).ToList());
Which in theory, sounded great, but in practice, I got an Cannot compile: Lambda
exception.
TLDR:
I need a way to pack something like this all method, or something like this into the Linq-Expression.