我有一个 它显示了各种项目 基于一个 SPView.

此外,我还实现了一个搜索模块,当输入关键字时,应该使用包含部分输入关键字的标题来获取所有项目 SPQuery.

使用 SPList.GetItems() 使用时工作正常 SPQuery =>

var itemCollection = SPList.GetItems(SPQuery);

上面的代码给了我我想要的项目,但不幸的是也给了我所有我不想要的项目。我想要的是从 SPView 与输入的关键字匹配。

我发现你可以将 SPQuery 与 SPView 一起使用 =>

var itemCollection = SPList.GetItems(SPQuery, "viewName");

这听起来不错,但仔细研究后发现“viewName”实际上应该是 SPView编号 ToString编辑。并且如果 SPQuery 包含一个 <Where> 子句中,“viewName”会覆盖该查询并仅返回该特定视图中的每个项目。

所以我的问题是,是否存在一种查询方法 SPView 直接还是我必须做一个痛苦的工作?


解决方案代码

谢谢西蒙·多伊的提示。

var query = new SPQuery(SPList.GetView(ListViewId))
{
    Query = string.Format(string.Concat(
            "<Where>",
                "<Or>",
                    "<Or>",
                        "<Contains>",
                            "<FieldRef Name='Title'/>",
                            "<Value Type='Text'>{0}</Value>",
                        "</Contains>",
                        "<Contains>",
                            "<FieldRef Name='FieldAutoGeneratedName'/>",
                            "<Value Type='Text'>{0}</Value>",
                        "</Contains>",
                    "</Or>",
                    "<Contains>",
                        "<FieldRef Name='FieldATTCode'/>",
                        "<Value Type='Text'>{0}</Value>",
                    "</Contains>",
                "</Or>",
            "</Where>"
            ), param)
};
var items = SPList.GetItems(query);

上面的代码返回指定列表视图中匹配的所有项目 param

有帮助吗?

解决方案

如何使用构造函数创建 SPQuery 对象,您可以在其中传递适当的 SPView。

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spquery.spquery.aspx

然后,您可以添加一个查询以包含适当的项目,例如:-

var query = new SPQuery(spView); 

query.Query = String.Format("<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>{0}</Value></Eq></Where>", keyword);

SPListItemCollection listItems = oList.GetItems(query);

其他提示

如果 SPQuery 返回列表的所有项目,那么在大多数情况下 QueryString 就是错误的。(在我的选项中奇怪的)默认行为是,如果查询字符串错误,Caml 查询将返回所有项目。

以一个常见错误为例:SPQuery.Query 的查询字符串不得包含“<Query>”标记。如果是这样,它将返回所有项目并完全忽略Where 子句。

许可以下: CC-BY-SA归因
scroll top