Utilisation de l'infrastructure d'entité pour renvoyer une list de personnes où le prénom contient du text dans un tableau de strings.
Disons:
ssortingng[] search = new ssortingng[] { "bert", "rob" };
et requête
dataContext.People.Where(w => search.Any(a => w.Forename.Contains(a)));
Cela comstack et fonctionne MAIS le process appelle réellement tous les loggings de la database, puis exécute ma clause where sur datatables renvoyées. C'est logique.
Existe-t-il un moyen de réécrire la requête afin que la clause where soit générée dans SQL?
Je suppose que dataContext.People est un IQueryable
du DbSet
et qu'il n'y a aucune instruction de matérialisation impliquée telle que ToList()
ou AsEnumerable()
.
la réponse est ici: http://www.albahari.com/nutshell/predicatebuilder.aspx
dans ton cas:
var predicate = PredicateBuilder.False<People>(); foreach (ssortingng keyword in keywords) { ssortingng temp = keyword; predicate = predicate.Or (p => p.Forename.Contains (temp)); } dataContext.People.Where (predicate);
Une façon de faire est d'utiliser SqlQuery et d'effectuer une requête SQL réelle.
dataContext.Database.SqlQuery<People>("SELECT Forename, Lastname FROM myTable WHERE Forename LIKE '%bert%' or Forename LIKE '%rob%'");