10
votes

LINQ: ... où (x => x.contains (chaîne qui commencent par "foo"))

Compte tenu d'une collection de la classe suivante:

var posts = new List<Post>
{
    new Post { Tags = new[] { "fooTag", "tag" }},
    new Post { Tags = new[] { "barTag", "anyTag" }},
    new Post { Tags = new[] { "someTag", "fooBarTag" }}
};

var postsWithFooTag = posts.Where(x => [some fancy LINQ query here]);


2 commentaires

Merci à tous! Existe-t-il la possibilité de faire la casse «startwith Comparaison» insensible?


Utilisez stringcomparonison.ordinalisorecase . J'ai mis à jour ma réponse.


5 Réponses :


18
votes

Utiliser la chaîne startswith xxx

x.any vérifiera si un élément correspond à une condition. startswith vérifie si l'élément commence par un certaine chaîne.

Le renvoi ci-dessus: xxx

pour le faire citer insensitant Utiliser stringcomparison.ordinalIntorecase . xxx

retourne: xxx

tandis que startswith ("foo") retournets aucun résultat.


2 commentaires

+1 et réponse acceptée pour les informations supplémentaires et l'exemple insensible à l'affaire. Merci!


... et je pensais que j'étais si intelligent lorsque j'ai créé un startswithcomerer



8
votes

Essayez ceci:

var postsWithFooTag = posts.Where(x => x.Tags.Any(y => y.StartsWith("foo")))


0 commentaires

2
votes

Je crois que cela fonctionnera pour ce que vous essayez de faire.

postes.avias (p => p.tag.any (t => t.startswith ("foo")))


0 commentaires

2
votes
var tag = "foo";
var postsWithFooTag = 
  posts.Where( p=> p.Tags.Any( t => t.StartsWith(tag)));

0 commentaires

2
votes

Essayez x => x.tag.any (tag => tag.startswith ("foo"))


0 commentaires