Interrogation de deux types d'entités différents à l'aide de PredicateBuilder
-
12-09-2019 - |
Question
J'essaie désespérément d'utiliser LinqKits PredicateBuilder pour permettre à l'utilisateur de saisir un terme de recherche dans une zone de texte et de renvoyer les enregistrements de deux tables/ensembles d'entités de base de données, mais j'ai du mal à aller quelque part.La structure (simplifiée) de la base de données est la suivante :
Person Alias
------ ------
A_ID
P_ID ---------------< P_ID
P_FIRST_NAME A_FIRST_NAME
P_SURNAME A_SURNAME
Ainsi, chaque personne peut avoir 0 ou plusieurs alias.Ce que j'essaie de faire, c'est de permettre à l'utilisateur de rechercher un nom et d'extraire les lignes de la table Personne où ce nom correspond à celui de la table Personne ou Alias.Pour l'instant j'ai :
var peopleQuery = MainFrm.genesisContext.People.AsExpandable();
var peoplePredicate = PredicateBuilder.True<Person>();
var aliasQuery = MainFrm.genesisContext.Alias.AsExpandable();
var aliasPredicate = PredicateBuilder.False<Alias>();
if (!String.IsNullOrEmpty(txtFirstName.Text.Trim()))
{
peoplePredicate = peoplePredicate.And(p => p.P_FIRST_NAME == txtFirstName.Text);
aliasPredicate = aliasPredicate.And(a => a.A_FIRST_NAME == txtFirstName.Text);
peoplePredicate = peoplePredicate .Or(p => aliasPredicate);
}
Cela ne fonctionne pas car j'essaie de convertir People en Alias.Fondamentalement, je suis complètement bloqué et je ne sais pas s'il est même possible de faire une requête Ou sur deux tables différentes (?)
La solution
Je peux penser à plusieurs solutions possibles:
- Inclure le prénom de chaque personne dans le formulaire table des alias, et il suffit de chercher sur le Tableau des alias, ou
- Union les deux tables ensemble avant la recherche, ou
- Lancer une requête Linq qui joint la table Alias à la table Person, et utilisez le résultat dans votre recherche, y compris votre état OR