SharePoint : 使用SPQuery对象时要注意的事项

我们经常需要对一个列表进行查询,此时最灵活的方式就是直接使用SPQuery对象。这个对象的查询语法称为CAML。一般为了简单起见,我们会通过下面这样小工具先生成一个查询范例

我们可以看到查询文本大致如下

<Query>
   <Where>
      <Contains>
         <FieldRef Name=‘_x6d4b__x8bd5_‘ />
         <Value Type=‘Text‘>chenxizhang</Value>
      </Contains>
   </Where>
</Query>

点击"Test"之后,可以看到如下效果

下面,我们就很自然地想到将这个查询文本用于我们自己的SPQuery对象

SPSite site = new SPSite("http://localhost:8080");
SPWeb web = site.OpenWeb();

SPList list = web.Lists["测试文档库"];
SPQuery q = new SPQuery();
q.Query = string.Format("<Query><Where><Contains><FieldRef Name=‘{0}‘ /><Value Type=‘Text‘>{1}</Value></Contains></Where></Query>", "_x6d4b__x8bd5_", "chenxizhang");

q.ViewFields = list.DefaultView.ViewFields.SchemaXml;

foreach (SPListItem item in list.GetItems(q))
{
    Console.WriteLine(item.ID);
}

Console.WriteLine("完成查询");

以上代码看似很正常,但很奇怪的是,查询似乎没有起作用,因为它总是返回文档库全部的ListItem

经过检查和确认,一定要将<Query>这个根元素拿掉,才可以生效。所以这是典型的由工具产生的误导啊

时间: 2024-08-17 06:18:43

SharePoint : 使用SPQuery对象时要注意的事项的相关文章

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型XXX的对象时检测到循环引用。

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型 的对象时检测到循环引用. 异常信息(部分): System.Web.Services.Protocols.SoapException: 服务器无法处理请求. ---> System.InvalidOperationException: 生成 XML 文档时出错. ---> System.InvalidOperationException: 序列化类型 Web

angularjs中directive声明scope对象时修饰符解释和用法

在angular中我们定义directive方法时,可以看到 return { restrict: 'AE', scope: {}, template: '<div></div>', link: function() {} } 除了代码中出现的属性,还有一些其他的属性可供配置,这里不作详述. 今天我们要说的重点是scope字段. 常规用法设置 scope: { name: '=', age: '=', sex: '@', say: '&' } 假设我们的hml代码如下 &l

C++返回值为对象时复制构造函数不执行怎么破

先说点背景知识,调用复制构造函数的三种情况: 1.当用类一个对象去初始化另一个对象时. 2.如果函数形参是类对象. 3.如果函数返回值是类对象,函数执行完成返回调用时. 在辅导学生上机时,有同学第3点提出异议.有教材上的例题为证: #include <iostream> using namespace std; class Point //Point 类的定义 { public: Point(int xx=0, int yy=0) { x = xx; //构造函数,内联 y = yy; } P

元数据管理器中存在错误。 实例化来自文件“\\?\C:\Program Files\Microsoft SQL Server\MSAS11.MSSQLSERVER\OLAP\Data\Tfs_Analysis.0.db\vDimTestCaseOverlay.874.dim.xml”的元数据对象时出错。

一.发现问题 启动SQLSERVER的数据分析服务失败 查看系统日志错误如下: 双击错误后显示详细错误: 元数据管理器中存在错误. 实例化来自文件“\\?\C:\Program Files\Microsoft SQL Server\MSAS11.MSSQLSERVER\OLAP\Data\Tfs_Analysis.0.db\vDimTestCaseOverlay.874.dim.xml”的元数据对象时出错. 二.解决问题-数据库 然后我手动尝试将“C:\Program Files\Microso

条款21:必须返回对象时,别妄想返回其reference

条款21:必须返回对象时,别妄想返回其reference 引用只是对象的一种别名当使用引用的时候,请确认他的另一个身份在哪? class Rational { public: Rational(int x, int y) : m_x(x), m_y(y){} //返回const是属于类型保护,friend修饰,以后条款详说 friend const Rational operator + (const Rational &lhs, const Rational &rhs) { Ration

EC笔记:第二部分:12、复制对象时勿忘其每一个成分

EC笔记:第二部分:12.复制对象时勿忘其每一个成分 1.场景 某些时候,我们不想使用编译器提供的默认拷贝函数(包括拷贝构造函数和赋值运算符),考虑以下类定义: 代码1: class Point{ private: double x; double y; public:         Point()=default; Point(const Point &other){ x=other.x; y=other.y; } const Point& operator=(const Point

Effective C++ Item 12-复制对象时忽忘其每一个成分

Item 12-复制对象时忽忘其每一个成分(Copy all parts of an object) 设计良好之面向对象系统(OO-system)会将对象的内部封装起来,只留两个函数负责将对象拷贝(复制),那便是带着适切名称的copy构造函数和copy assignment操作符,称它们为copying函数. 如果是"编译器生成版本"的行为:将被拷对象的所有成员变量都做一份拷贝. 如果是自己声明就要注意了. 如果是为"derived class撰写copying函数"

[菜鸟]C++创建类对象时(无参)后不加括号与加括号的区别

在不考虑用new动态创建对象的情况下,用最普通的 类名 对象名(参数); 的方法创建对象 先贴上最正常最普通的代码 #include<iostream> using namespace std; class C{ public: C(){ cout<<"Hello C++\n"; }; C(int m){ cout<<"I love C++\n"; }; private: int n; }; int main(){ C c; re

Effective C++_笔记_条款12_复制对象时勿忘其每一个成分

(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 编译器会在必要时候为我们的classes创建copying函数,这些“编译器生成版”的行为:将被烤对象的所有成员变量都做一份拷贝. 如果你声明自己的copying函数,意思就是告诉编译器你并不喜欢缺省实现中的某些行为.编译器仿佛被冒犯似的,会以一种奇怪的方式回敬:当你的实现代码几乎必然出错时却不告诉你.所以自己实现copying函数时,请遵循一条规则:如果你为c