6

ここで記事をチェックし、指先が青くなるまでグーグルで検索しました。私は読み、読み、読みましたが、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 Joins Query 文字列を使用して、この同じ操作が実行された正確な例を取得できますか?

4

2 に答える 2

11

リストの 1 つからクエリを作成します。

 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. ルックアップ フィールドに基づく必要があるというロブ ウィンザー氏の意見に同意しますが、私のテストでは、ListItemID タイプ フィールドへのルックアップでなければなりません。SharePoint では、これは内部 ID フィールドです。(私はこれを知っています。なぜなら、私はテキスト フィールドへのルックアップを持っていて、それがうまくいかないからです。何時間も無駄にしています。) 私は現在、Microsoft フォーラムに RefType パラメーターを 'ID 以外のものにすることができるかどうかを尋ねる投稿をしています。 '、それで多分それを見守ってください。最後に、射影されたフィールドで、Type パラメーターが常に「lookup」でなければならない場合、なぜそれが必要なのですか?

  3. CAML Query Builders (YACQB および U2U) は結合をサポートしていないため、わざわざダウンロードして試してはいけません。

于 2012-11-27T17:19:27.847 に答える