我在这里查了一些文章并用Google搜索直到我的指尖是蓝色的。我已阅读,阅读和阅读,似乎无法在Sharepoint2010中围绕CAML联接。
问题:有人可以向我展示 完全 CAML加入查询与SQL加入查询相比较的完整示例吗?
*For Example (SQL of Course, just something to work with)*
If I had a Database named "whatever" & it contained two tables.
We'll name these "tableA" & "tableB", respectively.
Let's say they look like this:
- tableA -
ID | Column1 | Column2 | Column3
- tableB -
ID | Column4 | Column5 | Column6
SELECT tableA.Column1, tableA.Column2, tableB.Column4
FROM tableA
INNER JOIN tableB ON tableA.ID = tableB.ID
Would give me something like:
- newTable -
Column1 | Column2 | Column4
result | result | result
result | result | result
result | result | result
所以,我的问题是,我是否可以使用CAML联接查询字符串在Sharepoint 2010中获得此相同操作的完全示例?
答案 0 :(得分:11)
从您的某个列表中创建查询。
SPList list = SPContext.Current.Site.RootWeb.Lists["TableA"];
SPQuery query = new SPQuery();
要进行加入,请将query.Joins
设置为
<Join Type="INNER" ListAlias="TableB">
<Eq>
<FieldRef Name="TableA" RefType="ID" />
<FieldRef List="TableB" Name="ID" />
</Eq>
</Join>
和query.ProjectedFields
到
<Field Name="TableBColumn4" Type="Lookup" List="TableB" ShowField="Column4">
选择要将query.ViewFields
设置为
<FieldRef Name="Column1">
<FieldRef Name="Column2">
<FieldRef Name="TableBColumn4">
然后
SPListItemCollection result = tablea.GetItems(query);
或类似的东西(它来自记忆!)
答案 1 :(得分:5)
我的沮丧反映了你的,这里还有一些提示:
根据关系中的子表启动查询。 (我无法从你的例子中看出哪个是父母,哪个是孩子。)
我同意Rob Windsor的说法,它必须基于Lookup字段,但从我的测试来看,它必须是对ListItemID类型字段的查找。在SharePoint中,这是内部ID字段。 (我知道这一点,因为我查找了一个文本字段,它只是不起作用。浪费了几个小时。)我目前在Microsoft论坛上有一篇帖子,询问RefType参数是否可以是'ID以外的任何内容',所以也许留意这一点。最后,如果在投影字段中,Type参数必须始终为'lookup',那么为什么需要它呢?
CAML查询构建器(YACQB和U2U)都不支持连接,所以不要费心下载和尝试。