如何使用 CAML 联接,如 SQL 联接



我在这里检查了文章,并在谷歌上搜索,直到我的指尖是蓝色的。 我已经阅读了又阅读,阅读了又阅读,只是似乎无法理解 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);

或类似的东西(它来自记忆!

我的挫败感反映了你的,这里有一些更多的提示:

  1. 根据关系中的子表启动查询。(我无法从你的例子中辨别出哪个是父母,哪个是孩子。

  2. 我同意 Rob Windsor 的观点,即它必须基于 Lookup 字段,但根据我的测试,它必须是对 ListItemID 类型字段的查找。在 SharePoint 中,这是内部 ID 字段。(我知道这一点,因为我可以查找文本字段,但它不起作用。浪费了几个小时的生命。我目前在Microsoft论坛上有一篇文章询问 RefType 参数是否可以是"ID"以外的任何内容,所以也许请密切关注这一点。 最后,如果在投影字段中,Type 参数必须始终为"查找",那么为什么需要它?

  3. 没有一个CAML查询生成器(YACQB和U2U)支持加入,所以不要费心下载和尝试。

相关内容

  • 没有找到相关文章

最新更新