检查逗号分隔字符串中的任何id是否与另一个字符串数组中的任何id匹配

时间:2015-04-30 09:28:30

标签: c# asp.net razor umbraco umbraco7

我正在使用Umbraco CMS(v7)开发博客文章系统,其中每个帖子可以选择多个类别供用户在前端进行过滤;博客文章的类别以逗号分隔的字符串形式存储,使用类别ID作为值。

我计划使用查询字符串值过滤博客帖子,并检查是否有任何博客帖子类别与任何ID查询字符串匹配。

以下是一些示例数据:

    Query String Categories = 1,5
    Blog Post 1 Categories: 1,2,5,7
    Blog Post 2 Categories: 6,7
    Blog Post 3 Categories: 1,6
    Blog Post 4 Categories: 3,4,5

我希望过滤能够返回博客帖子1,3& 4,因为Blog Post 2的类别与查询字符串中的任何ID都不匹配。

这是我的一些代码,我一直在努力;它没有用,但你可以看到我想要实现的目标:

var categories = !Request["c"].IsEmpty() ? Request["c"] : ""; // Query String Values
var categoryList = new List<int>(); // New integer list to add the split query string values to
IEnumerable<dynamic> Items = Umbraco.Content(1052).Descendants("BlogPost"); // Dynamic list of blog posts

if(!categories.IsEmpty()) // If the query string has some values
{
    foreach(var cat in categories.Split(',')) // Split the query string…
    {
        categoryList.Add(Convert.ToInt32(cat)); … and convert and add these id's to my integer list
    }       
     // The line that isn't really working, but the line i'm trying to add the filter to
    Items = Items.Where(categoryList.Contains(x => x.searchCategories.Any())).ToList();
}

所以我的问题是:如何检查是否有任何项目&#39;类别匹配查询字符串值中的任何类别,以实现与我的示例数据类似的结果?

对于Umbraco开发者:我使用多节点树选择器从博客文章中选择类别,内容仅限于我的类别&#39;节点列表。

1 个答案:

答案 0 :(得分:2)

如果正确填充了项目,您应该使用以下代码获得所需的结果:

var categoryList = categories.Split(',').Select(c=>int.Parse(c));   
Items = Items.Where(x => categoryList.Contains(x.categoryId)).ToList();