LINQ:...Where(x => x包含以"foo"开头的字符串)

10

给定一个以下类的集合:

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

使用 LINQ 有没有一种简单的方法来获取所有包含以 "foo" 开头的标签的 Post

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 现在应该包含 posts 的第1和第3项。


谢谢大家!有没有可能进行不区分大小写的“StartsWith比较”? - davehauser
使用 StringComparison.OrdinalIgnoreCase。我已更新我的答案。 - BrunoLM
5个回答

18
使用字符串的 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" }}
为了使它不区分大小写,请使用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") 没有返回结果时。


+1并接受答案,感谢提供额外信息和不区分大小写的示例。谢谢! - davehauser
当我创建了一个名为StartsWithComparer的东西时,我还以为自己很聪明。 - jrsconfitto

8

试试这个:

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

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

2

我相信这对你尝试做的事情会起作用。

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


(该代码片段是筛选包含标签以“foo”开头的帖子)

2
尝试使用x => x.Tags.Any(tag => tag.StartsWith("foo"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接