-1
votes

Recherche d'un motif

J'ai besoin de rechercher une liste pour certains motifs est présent ou non.

var result=roles.Where(z=>z.Contains(x) && z.Contains(y)).ToList();

string x = "Resource:resource1:resource2";
string y = "writer";
List<string> roles=new List<string>{"Resource::reader","Resource:resource1::Deleter","Resource:resource1::writer"};


7 commentaires

Qu'est-ce que rôles ? et où est-ce?


@ er-sho rôles est de type liste .IT est une variable globale avec certaines valeurs fixes telles que: {"ResourceName :: écrivain", "ressource :: écrivain", "ASDFF: Reade R"}.


Alors, comment voulez-vous filtrer?


J'ai besoin de trouver si dans la liste "rôles" toute valeur est là comme: 1) Split x basé sur ":". Ajoutez-y à chaque partie.Veuillez voir le résultat que j'ai mentionné, vous obtiendrez une image claire.


Pouvez-vous donner quelques exemples. Votre question est très peu claire. Nous devons deviner ce que vous êtes occupé et essayer de comprendre ce que vous essayez de réaliser. semble être un problème x y. Si cela est effectivement pour les rôles, il existe de nombreux moyens de vérifier si un utilisateur a le rôle de faire la tâche qu'il tente d'accéder


Peut-être donner du code reproductible.


Essayé de faire la question plus claire


3 Réponses :


1
votes

Si ma compréhension de votre problème est correcte:

Vous avez une liste qui peut contenir tout ce que vous nomme des rôles. Thoses Les rôles sont au format A :: B ou A: B :: C ou A: B: C :: D etc.

Et ce que vous voulez réaliser est de trouver s'il s'agit d'un "chemin" ou une combinaison de chemin de x peut donner le rôle y?

Par exemple: Si vous avez des rôles comme A :: ZA :: YA: B :: XA: B: C :: X

Vous avez x qui est: B: C

et vous avez y qui est x

vous voulez vérifier est que vous avez :: x dans la liste

Si vous ne le faites pas, vous allez vérifier A ::: x dans la liste,

et si vous ne le faites toujours pas, vous rechercherez A: B: C :: x

Encore à nouveau si j'ai raison, vous pouvez considérer quelque chose comme ceci: xxx

De cette façon, vous commencez à scpartrer votre chemin x en tant que Liste et vous l'agrégez dans le forach pour regarder chaque étape.


1 commentaires

Oups il y a une erreur dans mon code. Je vais le réparer et éditer



0
votes

Vous devriez envisager d'utiliser une expression régulière. Essayez ceci,

p>

string x = "Resource:resource1:resource2";
string y = "writer";
List<string> roles;
List<string> words   = new List<string> { x, y };
// We are using escape to search for multiple strings.
string       pattern = string.Join("|", words.Select(w => Regex.Escape(w)));
Regex        regex   = new Regex(pattern, RegexOptions.IgnoreCase);

// You got matched results...
List<string> matchedResults = roles.Where(regex.IsMatch).ToList();


0 commentaires

0
votes
        string x = "Resource:resource1:resource2";
        string y = "writer";
        List<string> roles = new List<string>
        {
            "Resource::writer",
            "Resource:resource1:resource2::writer"
        };

        var records = x.Split(':').Select((word, index) => new { word, index });

        var result =
            from record in records 
            let words = $"{string.Join(":", records.Take(record.index + 1).Select(r => r.word))}::{y}"
            join role in roles on words equals role
            select words;

0 commentaires