Bonjour,

j'ai un soucis avec une requête qui ne veut pas accepter la méthode .Contains dans une clause where.
Je voudrais faire l'équivalent du "WHERE x in (1,2,3)" du SQL.

Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// construction des collection de périmètre
                                var listFils = new List<int>();
                                var listEnts = new List<int>();
                                var listOps = new List<int>();
                                foreach(var p in currPerms){
                                    var fk_p = urm.getfkPerineter(p.Id_PERIMETRE);
                                    if(fk_p.idEnt!=null && !listEnts.Contains(fk_p.idEnt)){
                                        listEnts.Add(fk_p.idEnt);
                                    }
                                    if(fk_p.idFil!=null && !listFils.Contains(fk_p.idFil)){
                                        listFils.Add(fk_p.idFil);
                                    }
                                    if(fk_p.idOp!=null && !listOps.Contains((int)fk_p.idOp)){
                                        listOps.Add((int)fk_p.idOp);
                                    }
                                }
                                var listFils_q = listFils.AsQueryable();
                                var listEnts_q = listEnts.AsQueryable();
                                var listOps_q = listOps.AsQueryable();
                                // jalon de l'utilisateur
                                var jalons=db.JALON
                                .Include("FILIERE")
                                .Include("ENTITE")
                                .Include("OPERATION")
                                .Where(a=>
                                    a.ACTIF==true &&
                                    a.UTILISATEUR.ID_UTILISATEUR==lu.ID_UTILISATEUR && 
                                    a.NUM_ENR.ID_ENR==fk_rem.IDEnr &&
                                    (a.FILIERE != null && listFils_q.Contains(a.FILIERE.ID_FILIERE)) &&
                                    (a.ENTITE != null && listEnts_q.Contains(a.ENTITE.ID_ENTITE)) &&
                                    (a.OPERATION != null && listOps_q.Contains(a.OPERATION.ID_OPERAT))
                                );
après avoir exécuté cette requète, en mettant un espion sur la variable jalons et en voulant afficher les résultats, il me dit :
{"LINQ to Entities ne reconnaît pas la méthode «*Boolean Contains[Int32](System.Linq.IQueryable`1[System.Int32], Int32)*», et cette dernière ne peut pas être traduite en expression de magasin."}
J'ai essayé sans passer mes List en Queryable mais cela ne change pas le problème...

Merci d'avance.

PS : Framework .Net 3.5