4

クライアント OM を使用してリストをクエリするときに、ロードする項目フィールドのリストを動的に生成/指定するにはどうすればよいですか?

これは、CAML クエリでタグを使用して実行できますが、不要なフィールドが追加で読み込まれるため、ペイロードが大きくなります。ここを参照してください: http://blogs.technet.com/b/speschka/archive/2009/11/01/using-the-sharepoint-2010-client-object-model-part-3.aspx

使用しているテストコードは次のとおりです。

    ClientContext clientContext = new ClientContext("http://myserver/sites/mysite");
Web site = clientContext.Web;

List list = clientContext.Web.Lists.GetByTitle("MyList");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View Scope='RecursiveAll'><RowLimit>100</RowLimit></View>";
ListItemCollection listItems = list.GetItems(camlQuery);

clientContext.Load(listItems,
      items => items.ListItemCollectionPosition,
      items => items.Include(
              item => item["ID"],
              item => item["Title"]
              ));

clientContext.ExecuteQuery();

私がやりたいことは、実行時に Include メソッドのラムダ式を生成することです。まだ運がありません。私が試したすべてのソリューションで、「クエリ式はサポートされていません」というエラーが表示されます。

4

3 に答える 3

0

CamlQuery を介してロードするフィールドを動的に指定する場合は、各フィールドをループでロードできます。

var array = new string[] { "ID", "Title" }; // define dynamically, this is just an example
foreach (var field in array)
{
    clientContext.Load(listItems, includes => includes.Include(i => i[field]));
}

生成されたクエリは、1 つの Load メソッド内の複数のラムダ式とまったく同じです。

clientContext.Load(listItems, includes => includes.Include(i => i["ID"], i => i["Title"]));

どちらもクエリを生成します。

<Query Id="#" ObjectPathId="#">
    <Query SelectAllProperties="false">
        <Properties />
    </Query>
    <ChildItemQuery SelectAllProperties="false">
        <Properties>
            <Property Name="ID" ScalarProperty="true" />
            <Property Name="Title" ScalarProperty="true" />
        </Properties>
    </ChildItemQuery>
</Query>
于 2017-05-29T09:54:41.443 に答える
0

無料の CAMLDesigner ( http://sharepoint.biwug.be/SitePages/Caml_Designer.aspx ) をお勧めします - そこでは、caml を作成し、素敵な GUI で結果を確認できます。

https://sharepoint.stackexchange.com/a/69172/5170

于 2013-05-28T06:59:48.963 に答える