10 Stimmen

LINQ: ...Where(x => x.Contains(string that start with "foo"))

Gegeben ist eine Sammlung der folgenden Klasse:

public class Post
{
    ...
    public IList<string> Tags { get; set; }
}

Gibt es eine einfache Möglichkeit, alle Post s, die einen mit "foo" beginnenden Tag enthalten, mit LINQ?

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]);

postsWithFooTag sollte nun die Punkte 1 und 3 von posts .

18voto

BrunoLM Punkte 93432

Verwenden Sie den String StartsWith

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

x.Any prüft, ob ein Element eine Bedingung erfüllt. StartsWith prüft, ob das Element mit einer bestimmten Zeichenkette beginnt.

Das obige Ergebnis:

new Post { Tags = new[] { "fooTag", "tag" }},
new Post { Tags = new[] { "someTag", "fooBarTag" }}

Um es auf den Punkt zu bringen insensitive verwenden. StringComparison.OrdinalIgnoreCase .

var postsWithFooTag = posts.Where(x => x.Tags.Any(y => y.StartsWith("FoO", StringComparison.OrdinalIgnoreCase)));

Rückgabe:

new Post { Tags = new[] { "fooTag", "tag" }},
new Post { Tags = new[] { "someTag", "fooBarTag" }}

während StartsWith("FoO") liefert keine Ergebnisse.

8voto

CodingGorilla Punkte 19206

Versuchen Sie dies:

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

2voto

Rex Morgan Punkte 2938

Ich glaube, dass dies für das, was Sie vorhaben, funktionieren wird.

posts.Where(p => p.Tags.Any(t => t.StartsWith("foo")))

2voto

Philip Rieck Punkte 31977
var tag = "foo";
var postsWithFooTag = 
  posts.Where( p=> p.Tags.Any( t => t.StartsWith(tag)));

2voto

GôTô Punkte 7877

Versuchen Sie x => x.Tags.Any(tag => tag.StartsWith("foo"))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X