J’ai le code suivant:
public void SalesCount(ssortingng customerId) { .. .. return ...; } var resultQuery = dataContext.Customers .Where (c => c.Name == "Alugili") .Where (c => SalesCount(c.CustomerId) < 100);
Lorsque j’exécute resultQuery, je reçois une erreur de traduction en SQL.
J’ai besoin d’appeler SalesCount dans le Où puis-je faire? Y at -il une solution de contournement pour ce problème!
Simplement vous ne pouvez pas. Vous ne pouvez pas exécuter directement le code C # sur le serveur SQL, vous ne pouvez utiliser que des Expressions
et des fonctions spéciales reconnues …
Sauf si vous transformez votre requête (au moins partiellement) en LINQ-to-Objects …
var resultQuery = dataContext.Customers .Where (c => c.Name == "Alugili") .AsEnumerable() .Where (c => SalesCount(c.CustomerId) < 100);
Sachez que le dernier Where
sera exécuté côté client, de nombreuses lignes inutiles seront extraites de la firebase database.
Essayer
var resultQuery = dataContext.Customers .Where (c => c.Name == "Alugili") .ToArray() .Where (c => SalesCount(c.CustomerId) < 100);
Mais alors le second Where
n'est pas exécuté en SQL mais localement - tous les clients portant le nom "Alugili" sont extraits de la firebase database ...
Sinon, vous devez écrire votre méthode directement dans la méthode where en tant qu'expression lambda.
Ajouter && entre deux où condition..Il fonctionnera
Oui, vous pouvez.
mais vous devriez changer le type de retour pour votre fonction:
public **int** SalesCount(ssortingng customerId) { .. .. return 500; } var resultQuery = dataContext.Customers.AsEnumerable() .Where (c => c.Name == "Alugili" && SalesCount(c.CustomerId) < 100);