LINQ:… Where(x => x.Contains(以“foo”开头的字符串))

给定以下类的集合:

public class Post { ... public IList Tags { get; set; } } 

是否有一种简单的方法可以使用LINQ获取包含以“foo”开头的标记的所有Post

 var posts = new List { 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现在应该包含posts 1和第3项。

使用字符串的StartsWith

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

x.Any将检查是否有任何元素符合某些条件。 StartsWith检查元素是否以某个字符串开头。

以上回复:

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

为了使它insensitive使用StringComparison.OrdinalIgnoreCase

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

返回:

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

StartsWith("FoO")则不返回任何结果。

试试这个:

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

我相信这对你想要做的事情有用。

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

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

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