Je suis un peu nouveau dans LINQ et Entity Framework, donc des requêtes SQL assez simples me causent un mal de tête. J'ai un écran de saisie utilisateur qui leur permet de sélectionner des valeurs d'entrée et la requête qui en résulte dépend des valeurs entrées par l'utilisateur. Les groupes de requêtes résultant les résultats à présenter une liste de clients uniquesLinq faisant un groupe dans un sous-groupe lambda
table design simplifié - Un client peut être dans de nombreux États
client
CustomerId
Nom
JoinDate
État
StateId
CustomerId
Ainsi, l'utilisateur doit entrer un nom de client sur l'écran pour déclencher la requête, mais l'état est un champ facultatif, donc ma requête doit être un peu dynamique dans le code. La LINQ de base, je l'ai écrit est assez simple
dim cust = from c in ctx.Customer
where c.Name = InputFromScreen
Select c.CustomerId, c.Name, c.JoinDate, C.State
Maintenant que j'ai une requête LINQ de base, je peux utiliser des expressions lambda pour réduire davantage le queryset, en fonction de l'entrée de l'écran (ajoutez ANDs à l'endroit).
Exemple: Si l'utilisateur est entré dans une valeur pour le champ Date d'inscription:
cust = cust.Where(Function(c) c.JoinDate = DateFromScreen)
Cependant, je ne peux pas comprendre comment ajouter le cas/Groupe pour l'État puisque l'État est une navigation, pas une table Le SQL pour cela serait plutôt simple (et ce n'est pas optimal, mais l'ajout des AND pour chaque élément à l'écran est le moyen le plus simple à l'exemple)
select c.customerid, c.name
from customer c
where c.name = 'input' and c.JoinDate = 'input' and
c.customerid in (select customerid from state where state = 'IN')
Je pense que c'est assez simple.