我有一个新闻对象,其中包含一个名为 tags 的属性,这是一个字符串列表。
从这个对象的集合中,我想获取那些包含字符串子集的 News 项目(例如:tag1,tag3,tag5),其属性为标签。但所有这些,不仅仅是一个。我怎么能用LINQ做到这一点? (如果可能的话)?
答案 0 :(得分:2)
您可以使用Enumerable.All
+ Contains
:
var tags = new List<string>{"tag1", "tag3", "tag5"};
var query = allNews.Where(n => tags.All(n.Tags.Contains));
或!tags.Except(n.Tags).Any
:
var query = allNews.Where(n => !tags.Except(n.Tags).Any());
或(如果您可以更改收藏类型,我最喜欢的)使用HashSet.IsSubsetOf
:
var tags = new HashSet<string> { "tag1", "tag3", "tag5" };
var query = allNews.Where(n => tags.IsSubsetOf(n.Tags));
答案 1 :(得分:1)
你的意思是这样的吗?
list.Where(x => new[] {"tag1", "tag3", "tag5"}.All(y => x.Tags.Contains(y)));
过滤掉News
属性Tags
属性不是{&#34; tag1&#34;,&#34; tag3&#34;,&#34; tag5&#的超集的<tr *ngFor="let record of records">
<td [ngClass]="record.name === 'something' ? 'classForSomething' : 'classForOthers' ">{{record.name}}</td>
</tr>
个对象34;}
答案 2 :(得分:1)
答案:
List<News> sample = collection.Where(x => x.tags.Intersect(tags).Count() > 0).ToList();
说明:
我为您的案例创建了一个示例应用程序,看看是否有帮助
List<News> collection = new List<News>();
collection.Add(new News());
collection.Add(new News());
collection.Add(new News());
collection.Add(new News());
List<string> tags = new List<string>();
tags.Add("tag1");
tags.Add("tag2");
tags.Add("tag3");
collection[0].tags = tags;
collection[0].tags.AddRange(tags);
collection[1].tags = new List<string>();
collection[2].tags = new List<string>();
collection[3].tags = new List<string>();
List<News> sample = collection.Where(x => x.tags.Intersect(tags).Count() > 0).ToList();
结果截图