Question Linq très bête ...

Résolu
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009 - 20 févr. 2008 à 00:55
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009 - 20 févr. 2008 à 20:09
J'utilise linq est j'ai un soucis très bête:
J'ai une table Dossier avec 3 champs id et chemin et acces
on va dire rempli avec un champ qui à un 'guid', un chemin genre '\TEST', est acces à 0

Ce bout de code ne marche pas et n'est pas très logique, mais c'est dans l'idée de ce que je veux faire

string lsMonChemin= @'\TEST\SousDossier\EncoreUnSousDossier'; 
var
 lChampAcces = fromDossierin loData.GedTDossiers
where lsMonChemin.StartsWith(Dossier .Chemin)
selectDossier.
acces;

Voila j'aimerai qu'il me renvoi tous les enregistrements qui valide le test
lsMonChemin.StartsWith(Dossier .Chemin)
Je sais pas trop comment faire.

Merci pour votre aide.
P.S. je suis peut être passé à coté du raisonnement logique  mais là je ne vois pas

7 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
20 févr. 2008 à 14:58
et pourquoi pas :

stirng[] tab = new string[] {"test1", "test2", "test3"};

var lChamps = from Dossier in loData.TableDossiers
   where tab.Contains(Dossier.Chemin)
   select Dossier.access;

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
20 févr. 2008 à 09:00
hum...

j'ai peur de ne pas tout comprendre...

string lsMonChemin = @"chemin";
var lChampAccess = from Dossier in loData.GetTDossiers
   where lsMonChemin.StartsWith(Dossier.Chemin)
   select new {Dossier.Chemin, Dossier.Acces};

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
20 févr. 2008 à 10:10
voila l'explication pratique :
J'ai des dossiers :
/dossier/
/dossier/sousdossier
/dossier/sousdossier/encoresousdossier/






maitenant dans ma table dossier si il y a l'entrée /test ca veux dire que je n'ai pas les droits pour acceder à /dossier et les sous répértoires de /dossier
Donc si j'ai mon chemin courant, /dossier/sousdossier vu que dans ma base j'ai /dossier il doit me renvoyer l'enregistrement...






C'est pas évident à expliquer ...




/SPAN>
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
20 févr. 2008 à 10:54
et le code que je t'ai donné ne fonctionne pas ?

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
20 févr. 2008 à 11:22
Arf non je peux pas tester là maintenant, mais il me semble avoir déjà essayé, et il lance une exeption si je me souviens bien.
0
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
20 févr. 2008 à 13:36
J'ai peut être un début de réponse, mais qui amène une autre question.
Ma requete je vais devoir la construire par le code par exemlpe j'ai un string[] de 5 élément et j'aurai 5 where

ex:
//string[0] => "test1"
//string[1] => "test2"
//string[3] => "test3"

var
 lChamps = from Dossier in loData.TableDossiers
where Dossier .Chemin == string[0]
where Dossier .Chemin == string[1]
where Dossier .Chemin == string[2]
selectDossier.acces;

Mais bien sû cela doit varier en fonction  du nombre d'élément du tableau. C'est équivalent à whereDossier .Chemin in (string[0], string[1], string[2]) en sql...

Linq ca à l'air vriament bien, mais ca n'est pas toujours évident à transformer des requetes que l'on ferait de manière classique en sql server.
0
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
20 févr. 2008 à 20:09
Alors avec
where lsMonChemin.StartsWith(Dossier.Chemin)
J'ai cette erreur à l'éxecution :
"Only arguments that can be evaluated on the client are supported for the String.StartsWith method"

Et avec
where tab.Contains(Dossier.Chemin)
Ca marche, c'est moins propre, ca m'oblige à faire un petit traitement,  mais rien de dramatique.

Donc merci à toi sebmafate.
0
Rejoignez-nous