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"};
3 Réponses :
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. P>
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? p>
Par exemple: Si vous avez des rôles comme A :: ZA :: YA: B :: XA: B: C :: X P>
Vous avez x qui est: B: C p>
et vous avez y qui est x p>
vous voulez vérifier est que vous avez :: x dans la liste p>
Si vous ne le faites pas, vous allez vérifier A ::: x dans la liste, p>
et si vous ne le faites toujours pas, vous rechercherez A: B: C :: x p>
Encore à nouveau si j'ai raison, vous pouvez considérer quelque chose comme ceci: p> 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. p> p>
Oups il y a une erreur dans mon code. Je vais le réparer et éditer
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();
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;
Qu'est-ce que
rôles code>? 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