获取包含项子集的所有列表

时间:2018-05-14 11:58:17

标签: c# linq

我有一个新闻对象,其中包含一个名为 tags 的属性,这是一个字符串列表。

从这个对象的集合中,我想获取那些包含字符串子集的 News 项目(例如:tag1,tag3,tag5),其属性为标签。但所有这些,不仅仅是一个。我怎么能用LINQ做到这一点? (如果可能的话)?

3 个答案:

答案 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();

结果截图

enter image description here