2012-08-10 7 views
6

He revisado los artículos aquí y en Google hasta que estoy azul en la punta de los dedos. He leído, leído y leído, y parece que no puedo entender a CAML Joins en Sharepoint2010.Cómo trabajar CAML se une como combinaciones SQL?

Pregunta: Por favor alguien puedemostrar mí un ejemplo completo de cómo exactamente CAML consulta de combinación se compara con SQL consulta de combinación?

*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 

Así, de nuevo, mi pregunta es, ¿Puedo obtener una exacta ejemplo de esta misma operación se inacted sobre en SharePoint 2010 mediante el CAML se une a la cadena de consulta?

Respuesta

11

Crea tu consulta desde una de tus listas.

SPList list = SPContext.Current.Site.RootWeb.Lists["TableA"]; 
SPQuery query = new SPQuery(); 

Para hacer la unión, establecer query.Joins a

<Join Type="INNER" ListAlias="TableB"> 
    <Eq> 
     <FieldRef Name="TableA" RefType="ID" /> 
     <FieldRef List="TableB" Name="ID" /> 
    </Eq> 
</Join> 

y query.ProjectedFields a

<Field Name="TableBColumn4" Type="Lookup" List="TableB" ShowField="Column4"> 

Para elegir los campos de presentación Establecido query.ViewFields a

<FieldRef Name="Column1"> 
    <FieldRef Name="Column2"> 
    <FieldRef Name="TableBColumn4">  

Entonces

SPListItemCollection result = tablea.GetItems(query); 

O algo por el estilo (que es de la memoria!)

+1

Eso en realidad lo ayuda a hacer un poco más desde. Probando cosas por ahora. Gracias. – SpYk3HH

+2

Avísame si he cometido errores terribles :) – podiluska

+4

Te perdiste una cosa importante, solo puedes unirte en los campos de búsqueda. –

5

Mi frustración refleja la suya, aquí hay algunos consejos más:

  1. inicio de la consulta basada en la tabla secundaria en el relación. (No puedo discernir de su ejemplo cuál sería el padre y cuál el niño.)

  2. Estoy de acuerdo con Rob Windsor en que debe basarse en los campos de búsqueda, pero de mis pruebas, debe ser una búsqueda de un Campo de tipo ListItemID. En SharePoint, este es el campo ID interno. (Lo sé porque busco un campo de texto, y simplemente no funciona. Horas de vida desperdiciadas.) Actualmente tengo una publicación en los foros de Microsoft preguntando si el parámetro RefType puede ser distinto de 'ID ', así que tal vez vigile eso. Finalmente, si en los campos proyectados, el parámetro Tipo siempre debe ser 'buscar', entonces ¿por qué es necesario?

  3. Ninguno de los constructores de consultas CAML (YACQB y U2U) admite uniones, por lo que no se moleste en descargar e intentar.