我在这里检查了文章,并在谷歌上搜索,直到我的指尖是蓝色的。 我已经阅读了又阅读,阅读了又阅读,只是似乎无法理解 Sharepoint2010 中的 CAML Joins。
问题:有人可以给我看一个完整的示例,说明 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 中执行此相同操作的确切示例?
从其中一个列表创建查询。
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);
或类似的东西(它来自记忆!
我的挫败感反映了你的,这里有一些更多的提示:
-
根据关系中的子表启动查询。(我无法从你的例子中辨别出哪个是父母,哪个是孩子。
-
我同意 Rob Windsor 的观点,即它必须基于 Lookup 字段,但根据我的测试,它必须是对 ListItemID 类型字段的查找。在 SharePoint 中,这是内部 ID 字段。(我知道这一点,因为我可以查找文本字段,但它不起作用。浪费了几个小时的生命。我目前在Microsoft论坛上有一篇文章询问 RefType 参数是否可以是"ID"以外的任何内容,所以也许请密切关注这一点。 最后,如果在投影字段中,Type 参数必须始终为"查找",那么为什么需要它?
-
没有一个CAML查询生成器(YACQB和U2U)支持加入,所以不要费心下载和尝试。