6

我已经在这里查看过文章并在 Google 上搜索,直到我的指尖都变蓝了。我已经阅读了阅读和阅读,但似乎无法理解 Sharepoint2010 中的 CAML 连接。

问题:有人可以给看一个完整的例子,说明CAML Join Query 与 SQL Join Query 的比较吗?

*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

所以,我的问题是,我能否得到一个在 Sharepoint 2010 中使用 CAML 连接查询字符串不执行相同操作的确切示例?

4

2 回答 2

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);

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

于 2012-08-10T18:55:04.167 回答
5

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

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

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

  3. CAML 查询构建器(YACQB 和 U2U)都不支持连接,所以不要费心下载和尝试。

于 2012-11-27T17:19:27.847 回答