[C#][Linq]Différence de procédure
Bonjour,
Je sais qu'il y a des "pointures" linq sur ce forum. Quelqu'un peut-il donc me dire pourquoi cette méthode fonctionne :
Code:
1 2 3 4 5 6 7 8 9 10
| var clients =
(from c in formMDI.Bdd.Client
select c).ToList();
var listeClients = // rechercher tous les clients pas encore utilisés
(from c in clients
where !c.EstDansLeTableau(tabl1)
&& !c.EstDansLeTableau(tabl2)
orderby c.NumClient
select c).ToList(); |
Mais pas celle-ci ?
Code:
1 2 3 4 5 6
| var listeClients2 =
(from c in formMDI.Bdd.Client
where !c.EstDansLeTableau(tabl1)
&& !c.EstDansLeTableau(tabl2)
orderby c.NumClient
select c).ToList(); |
dans le second cas, j'obtiens une erreur :
Citation:
LINQ to Entities ne reconnaît pas la méthode « Boolean EstDansLeTableau(FactuLite.Client, System.String[]) », et cette dernière ne peut pas être traduite en expression de magasin.
Y a-t-il une solution pour éviter de créer une liste avec tous les éléments de la table avant de faire la recherche?
Pour information, voici la méthode "EstDansLeTableau", qui est toute bête :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public static bool EstDansLeTableau(this Client client, string[] tableau)
{
bool result = false; // valeur de retour
if (tableau != null)
{
long NumTableau; // un numéro du tableau
long numClient = client.NumClient; // récupérer numéro du client
foreach (var item in tableau)
{
long.TryParse(item, out NumTableau); // tenter la conversion de l'élément en long
if (numClient == NumTableau) // si ce numéro est celui du client
{
result = true; // on a trouvé
break; // et fin de la recherche
}
}
}
return result;
} |
Merci d'avance
Claude