SPView
オブジェクトが多く、SPListItem
オブジェクトが多数含まれています(ビューには多くのフィールドがあります)。SPViewオブジェクトを照会する方法
私はこれらのフィールドのいずれかに興味があります。 specialField
このビューとspecialFieldを指定すると、値がspecialFieldに含まれているかどうかを知りたいと思います。ここで
は私がやりたいことやっての方法です:
String specialField = "Special Field";
String specialValue = "value";
SPList list = SPContext.Current.Site.RootWeb.Lists["My List"];
SPView view = list.Views["My View"]; //This is the view I want to query
SPQuery query = new SPQuery();
query.Query = view.Query;
SPListItemCollection items = list.GetItems(query);
foreach(SPListItem item in items)
{
var value = item[specialField];
if(value != null) && (value.ToString() == specialValue)
{
//My value is found. This is what I was looking for.
//break out of the loop or return
}
}
//My value is not found.
しかし、それぞれのListItemを反復することはほとんどの項目の何百ものがあるかもしれない、特にとして、最適なようです。このクエリは頻繁に実行されるので、効率的な方法を探しています。
EDIT 私の解決策をハードコードすることはできませんので、私はいつも、同じビューで作業されることはありません(それはリスト、ビューとspecialFieldを変更することができることを十分に汎用的である必要があります。
それが良いでしょうIEnumerableをオブジェクトにキャストするには、このような何かを言ってやるがいい?これは、より効率的である
list.GetItems(query).Cast<SPListItem>().Where(item =>
{
return ((item[specialField] != null) && (item[specialField].ToString() == specialValue));
}).Count() > 0;
または私は完全に間違った方向に向かっています
なぜ句をクエリに追加しないでください。例http://msdn.microsoft.com/en-us/library/ms457534.aspx –
私はクエリがどのように見えるかわからないので(ビュークエリです)。たとえば、OrderBy節がある場合、後でwhere節を追加することはできません( ... ... ... これは動作しません) –
Where句のようになります...フィールド比較 フィールド+ ORDER 、CAMLはXMLと同じように動作しますが、複数のルートノードのように見えますが、SPViewオブジェクトに送信されるものはすべてタグでカプセル化されています。 GoogleのSharePoint CAMLの場合 –
Colin