J'ai une requête LINQ qui recherche plusieurs mots-clés sur plusieurs colonnes. L'intention est que l'utilisateur peut rechercher plusieurs mots-clés et il recherchera les mots-clés sur chaque propriété dans mon entité Media
. Voici un exemple simplifié:Existe-t-il un moyen d'optimiser cette clause LINQ where qui recherche plusieurs mots-clés sur plusieurs colonnes?
var result = repository.GetAll<Media>().Where(x =>
x.Title.Contains("Apples") || x.Description.Contains("Apples") || x.Tags.Contains("Apples") ||
x.Title.Contains("Oranges") || x.Description.Contains("Oranges") || x.Tags.Contains("Oranges") ||
x.Title.Contains("Pears") || x.Description.Contains("Pears") || x.Tags.Contains("Pears")
);
En d'autres termes, je veux rechercher les mots-clés Apples
, Oranges
et Pears
sur les colonnes Title
, Description
et Tags
.
Le SQL ressemble à ceci en sortie:
SELECT *
FROM Media this_
WHERE ((((((((
this_.Title like '%Apples%'
or this_.Description like '%Apples%')
or this_.Tags like '%Apples%')
or this_.Title like '%Oranges%')
or this_.Description like '%Oranges%')
or this_.Tags like '%Oranges%')
or this_.Title like '%Pears%')
or this_.Description like '%Pears%')
or this_.Tags like '%Pears%')
Est-ce le SQL la plus optimale dans ce cas? Sinon, comment réécrire la requête LINQ pour créer l'instruction SQL la plus optimale? J'utilise SQLite pour les tests et SQL Server pour le déploiement réel.
Merci pour votre réponse. J'ai effectué un test comme Jon Skeet mentionné et il s'avère que le temps d'exécution pour mon nombre d'enregistrements attendus est négligeable. –