如何使用像SQL连接一样的CAML连接?

时间:2012-08-10 18:47:49

标签: c# .net sharepoint-2010 caml

我在这里查了一些文章并用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中获得此相同操作的完全示例?

2 个答案:

答案 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)

我的沮丧反映了你的,这里还有一些提示:

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

  2. 我同意Rob Windsor的说法,它必须基于Lookup字段,但从我的测试来看,它必须是对ListItemID类型字段的查找。在SharePoint中,这是内部ID字段。 (我知道这一点,因为我查找了一个文本字段,它只是不起作用。浪费了几个小时。)我目前在Microsoft论坛上有一篇帖子,询问RefType参数是否可以是'ID以外的任何内容',所以也许留意这一点。最后,如果在投影字段中,Type参数必须始终为'lookup',那么为什么需要它呢?

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