0

caml を使用してリスト項目を照会し (これを初めて実行)、更新日に基づいて項目を並べ替えて、最新のドキュメントにアクセスできるようにしようとしています。ただし、ID に基づいて SPListItem を取得しようとすると失敗します。

コード:

SPQuery query = new SPQuery();
String camlquery = "<OrderBy><FieldRef Name='Modified' Ascending='False' /></OrderBy>";                        
query.ViewAttributes = "Scope = 'Recursive'";
query.ViewFields = "<FieldRef Name='Modified' /><FieldRef Name='Title' /><FieldRef Name='Name' />";
query.Query = camlquery;
query.IncludeMandatoryColumns = true;
SPListItemCollection col = list.GetItems(query);


//failing here... I think   
SPListItem item = col.GetItemById(0);

SPListItemCollection 内のインデックスに基づいて SPListItem を取得する方法はありますか?

私が試してみました

SPListItem item = col[0];

また、運が悪い。

これが私が得ているエラーです:

値が期待される範囲内にありません。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.ArgumentException: 値が期待される範囲内にありません。

4

2 に答える 2

0

問題は、私が返品していたコレクションにありました。アイテムを使用する前に、結果があることを確認する必要がありました。

if (col.Count > 0)
{
SPListItem item = col[0];
}

愚かな間違い。

于 2013-02-27T19:15:10.387 に答える
0

SPListItem使用したい場合はId、caml を使用する必要はありません。これを試してください。

 SPSite oSite = new SPSite("http:/MyTestSite/");
 SPWeb oWeb = oSite.OpenWeb();
 SPList oList = oWeb.Lists["MyCustomList"];

 SPListItem oListItem = oList.Items.GetItemById(1);

ただし、caml を使用して取得することを主張する場合は、必ずcaml クエリに含めIdてください。ViewFields

Idasを使用してアイテムを取得します。

foreach (ListItem item in col)
{
    if(item["Id"] == 1) //Only an example
    {
        var itemFromId = item;
    }
}

また、ID プロパティの値は、リスト アイテムのコレクション内のアイテムのインデックスとは異なります。このプロパティには、アイテムの 1 から始まる整数 ID が含まれます。これは、以前に追加されたアイテムの ID より 1 大きい値です。アイテムが削除された場合、その ID は再利用されません。[より詳しい情報]

于 2013-02-15T22:10:53.453 に答える