首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LINQ过滤列表

问使用LINQ过滤列表
EN

Stack Overflow用户
提问于 2011-02-23 11:57:59
回答 5查看 133.7K关注 0票数 59

我有一个项目对象列表:

代码语言:javascript
复制
IEnumerable<Project> projects

项目类作为一个名为标记的属性。这是int[]

我有一个名为filteredTags的变量,它也是int[]。

因此,假设我的筛选标记变量如下所示:

代码语言:javascript
复制
 int[] filteredTags = new int[]{1, 3};

我希望将我的列表( projects )筛选为只返回具有筛选器中列出的所有标记的项目(在本例中,至少在标记属性中有标记1和标记3)。

我试图使用,其中()和包含(),但这似乎只有当我比较单个值时才有效。如何将列表与需要匹配筛选列表中所有项的另一个列表进行比较?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-23 12:05:59

编辑:更好的做法是这样做:

代码语言:javascript
复制
var filteredProjects = 
    projects.Where(p => filteredTags.All(tag => p.Tags.Contains(tag)));

EDIT2:老实说,我不知道哪一个更好,所以如果性能不是关键的话,选择一个你认为更易读的。如果是的话,你将不得不以某种方式对其进行基准测试。

也许Intersect是要走的路:

代码语言:javascript
复制
void Main()
{
    var projects = new List<Project>();
    projects.Add(new Project { Name = "Project1", Tags = new int[] { 2, 5, 3, 1 } });
    projects.Add(new Project { Name = "Project2", Tags = new int[] { 1, 4, 7 } });
    projects.Add(new Project { Name = "Project3", Tags = new int[] { 1, 7, 12, 3 } });

    var filteredTags = new int []{ 1, 3 };
    var filteredProjects = projects.Where(p => p.Tags.Intersect(filteredTags).Count() == filteredTags.Length);  
}


class Project {
    public string Name;
    public int[] Tags;
}

虽然一开始看起来有点丑。如果您不确定Distinct在列表中是否都是唯一的,则可以首先将它们应用于filteredTags,否则计数比较将无法像预期的那样工作。

票数 69
EN

Stack Overflow用户

发布于 2011-02-23 12:40:18

我们应该有包含(至少)所有过滤标签的项目,或者用不同的方式说,排除那些不包括所有过滤标记的项目。因此,我们可以使用Linq Except来获取那些不包括的标记。然后,我们可以使用Count() == 0只有那些不排除标记的:

代码语言:javascript
复制
var res = projects.Where(p => filteredTags.Except(p.Tags).Count() == 0);

或者我们可以通过用Count() == 0替换!Any()来稍微加快速度。

代码语言:javascript
复制
var res = projects.Where(p => !filteredTags.Except(p.Tags).Any());
票数 4
EN

Stack Overflow用户

发布于 2011-02-23 12:01:07

代码语言:javascript
复制
var result = projects.Where(p => filtedTags.All(t => p.Tags.Contains(t)));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5090568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档