Linq在搜索中吐出数字列表(kentico)

时间:2016-02-08 13:50:52

标签: c# linq kentico

在kentico中获取下面文档的标准方法(我认为它基于ObjectQuery并具有linq命令)。我试图通过一个字段来过滤它" newsCategory"其中包含" 1 | 2 | 3"等数据。所以我不能添加.Search(" newsCategory",1)等,因为我需要先拆分列表才能搜索它。我应该朝哪个方向看?选择子查询? (我是linq的新手)

onCreateView

4 个答案:

答案 0 :(得分:1)

就这是耦合表中的字段而言,您无法通过属性访问它,但必须使用GetValue()。一旦你有了,你可以像使用常规字符串一样使用它:

var news = DocumentHelper.GetDocuments("CMS.News")
            .OnSite("CorporateSite")
            .Path("/News", PathTypeEnum.Children)
            .Culture("en-us")
            .CombineWithDefaultCulture(false)
            .Where(d => d.GetStringValue("newsCategory","").Split('|').Contains("1"));  

答案 1 :(得分:0)

您确定您的数据是1 | 2 | 3而不是1 | 2 | 3 |或| 1 | 2 | 3?

如果是,您可以.Where("NewsCategory", QueryOperator.Like, "%" + id + "|%")

否则你可能需要取回更多结果,然后循环遍历它们并拆分值以找到你想要的结果。

答案 2 :(得分:0)

编辑:查看this article,其中显示了一些可以与数据查询API一起使用的更高级命令。您应该能够使用这些选项为MacGyver添加适当的过滤器。

我相信你正在寻找:

.WhereLike("DocumentCategoryID", "CategoryID");
//OR
.WhereLike("DocumentCategory","CategoryName");

我没有安装v8来仔细检查要过滤的确切键/值对,但根据this Document Query API article,您使用WhereLike()方法过滤文档集。

根据API documentation,GetDocuments()返回MultiDocumentQuery object。我不是100%确定是否实现了IEnumerable,所以你甚至可能无法使用LINQ。

答案 3 :(得分:-1)

我相信这样的事情会起作用。有一个属性,应该能够拉出价值。不完全确定它如何处理拥有1然后是11的情况,但它可能正在研究中。

// Get documents
var news = DocumentHelper.GetDocuments("CMS.News")
.OnSite("CorporateSite")
.Path("/News", PathTypeEnum.Children)
.Culture("en-us")
.CombineWithDefaultCulture(false)
.WhereIn("NewsCategory",1);