我有一个看起来像这样的列表:
Movie Year
----- ----
Fight Club 1999
The Matrix 1999
Pulp Fiction 1994
Run Code Online (Sandbox Code Playgroud)
使用CAML和SPQuery对象,我需要从Year列中获取一个不同的项目列表,它将填充下拉控件.
在CAML查询中搜索周围似乎没有这样做的方法.我想知道人们是如何实现这一目标的?
我试图写一个CAML查询执行针对特定SPList,范围限定于特定的文件夹,从该点递归,并返回所有listItems中(其中符合标准)和文件夹.
这是查询的代码,它似乎应该工作(格式化为可读性):
SPQuery query = new SPQuery();
query.Query = "
<Where>
<Or>
<Contains>
<FieldRef Name=\"FileRef\" />
<Value Type=\"Text\">foo</Value>
</Contains>
<Eq>
<FieldRef Name=\"FSObjType\" />
<Value Type=\"Lookup\">1</Value>
</Eq>
</Or>
</Where>";
query.ViewFields = "
<FieldRef Name=\"CustomField1\" Nullable=\"TRUE\" />
<FieldRef Name=\"CustomField2\" Nullable=\"TRUE\" />
<FieldRef Name=\"CustomField3\" Nullable=\"TRUE\" />
";
query.RowLimit = 500;
query.ViewAttributes = "Scope=\"RecursiveAll\"";
query.Folder = startingFolder;
DataTable dt = myList.GetItems(query).GetDataTable();
Run Code Online (Sandbox Code Playgroud)
所以 - 这只返回ListItems - 没有文件夹.
如果我从查询中删除其他条件,只留下FSObjType=1
,我得到一个COM异常"无法完成此操作.请再试一次."
如果我然后删除ViewFields,只留下Scope=RecursiveAll
和FSObjType=1
,我得到一个空的结果集.
我有一个像这样的sharepoint列表:
List
---------Folder 1
-----------------Item 1
-----------------Item 2
---------Folder 2
-----------------Item 1
-----------------Item 2
---------Folder 3
-----------------Item 1
-----------------Item 2
Run Code Online (Sandbox Code Playgroud)
如何获取所有文件夹List
?
如果当前用户有检查后Contribute
的权限Folder 1
,Folder 2
,Folder 3
?
我想使用CAML从SharePoint列表中获取数据,并使用标题过滤,使用忽略大小写
<Query>
<Where>
<Eq>
<FieldRef Name='Title' />
<Value Type='Text'>Car</Value>
</Eq>
</Where>
</Query>
Run Code Online (Sandbox Code Playgroud)
但是如果我有一个带标题的项目,那么忽略大小写:car
caml应该返回它我该怎么办呢?
我正在尝试根据视图获取列表中的项目数.到目前为止我尝试的每种方法只返回列表的总计.我已经尝试了搜索时遇到的每一种方法,一切都以相同的结果结束.
这是我尝试过的方法之一:
SPWeb web = SPContext.Current.Web;
SPView view = web.GetViewFromUrl("url to my view");
int count = view.ParentList.GetItems(view).Count;
Run Code Online (Sandbox Code Playgroud)
我的列表有28个项目,但我正在引用的视图过滤它并显示四个项目.我希望我的数量是4,而不是28 - 但28是我一直得到的.
这是我尝试过的另一种方法:
SPSite site = SPContext.Current.Site;
SPWeb web = site.OpenWeb();
SPQuery MyQuery = new SPQuery();
MyQuery.Query = "<Query><Where><Eq><FieldRef Name='strStatus' /><Value Type='Text'>submitted</Value></Eq></Where></Query>";
IEnumerable<SPListItem> results = web.Lists["Requests"].GetItems(MyQuery).Cast<SPListItem>();
// results.Count() is 28... should be 4
Run Code Online (Sandbox Code Playgroud)
所以在这个方法中,我正在跳过视图并尝试传入CAML查询.在U2U中测试我的查询时,按预期返回四个结果...
更大的图片是我在自定义菜单控件的OnMenuItemDataBound事件处理程序中执行此操作.我不知道这是否会产生重大影响,但我想要的是,每个项目链接到特定列表中的视图,将显示链接旁边该视图中的项目数.
任何想法为什么我得到一个列表总数而不是过滤总数?谢谢!
我想要查询的列表中有大约10000多行(Listitems).
我想迭代一个timerJob中的每个项目 - 但我不能一次采取所有这些:对象模型覆盖 - 否,ListView阈值 - 1000 - 在FARM级别,我不能改变它.
我有什么方法可以迭代10000+(像一批)?