将 SPQuery 与 SPList.GetItems(SPView) 结合使用
-
10-12-2019 - |
题
我有一个 网络部分 它显示了各种项目 网格视图 基于一个 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 子句。