SharePoint, List.Items и List.GetItems (Query) и Linq - PullRequest
4 голосов
/ 22 сентября 2009

Исходя из предложений, я пытаюсь использовать List.GetItems (Query) для получения моего начального подмножества данных, а не всего содержимого списка через List.Items. Однако, хотя List.Items.Cast () приводит к полезному IEnumerable для Linq, List.GetItems (Query) .Cast () - нет.

Рабочий код:

IEnumerable<SPListItem> results = SPContext.Current.Web.Lists[ListName].Items.Cast<SPListItem>().Where(item => item["Date"] != null).Where(item => DateTime.Parse(item["Date"].ToString()) >= StartDate).Where(item => DateTime.Parse(item["Date"].ToString()) <= EndDate);
MessageLine = results.Count().ToString();

нерабочий код:

string SPStartDate = SPUtility.CreateISO8601DateTimeFromSystemDateTime(this.StartDate);
string SPEndDate =   SPUtility.CreateISO8601DateTimeFromSystemDateTime(this.EndDate);

SPQuery MyQuery = new SPQuery();
MyQuery.Query = "<Where><And><And><Geq><FieldRef Name='Date'/><Value Type='DateTime'>" + SPStartDate + "</Value></Geq><Leq><FieldRef Name='Date'/><Value Type='DateTime'>" + SPEndDate + "</Value></Leq></And></Where>";

IEnumerable<SPListItem> results = SPContext.Current.Web.Lists[ListName].GetItems(MyQuery).Cast<SPListItem>();

MessageLine = results.Count().ToString();

Метод List.GetItems (Query) .Cast () создает следующее исключение в строке .Count ():

Microsoft.SharePoint.SPException: Не удается выполнить это действие. пожалуйста Попробуйте снова. ---> System.Runtime.InteropServices.COMException (0x80004005): не могу завершить это действие. Пожалуйста, попробуйте еще раз. в Microsoft.SharePoint.Library.SPRequestInternalClass.GetListItemDataWithCallback (String bstrUrl, String bstrListName, String bstrViewName, String bstrViewXml, SAFEARRAYFLAGS fSafeArrayFlags, ISP2DSafeArrayWriter pSACallback, ISPDataCallback pPagingCallback, ISPDataCallback pSchemaCallback) в Microsoft.SharePoint.Library.SPRequest.GetListItemDataWithCallback (String bstrUrl, String bstrListName, String bstrViewName, String bstrViewXml, SAFEARRAYFLAGS fSafeArrayFlags, ISP2DSafeArrayWriter pSACallback, ISPDataCallback pPagingCallback, ISPDataCallback pSchemaCallback) --- Конец внутренней трассировки стека исключений --- в Microsoft.SharePoint.Library.SPRequest.GetListItemDataWithCallback (String bstrUrl, String bstrListName, String bstrViewName, String bstrViewXml, SAFEARRAYFLAGS fSafeArrayFlags, ISP2DSafeArrayWriter pSACallback, ISPDataCallback pPagingCallback, ISPDataCallback pSchemaCallback) в Microsoft.SharePoint.SPListItemCollection.EnsureListItemsData () в Microsoft.SharePoint.SPListItemCollection.Undirty () в Microsoft.SharePoint.SPBaseCollection.System.Collections.IEnumerable.GetEnumerator () в System.Linq.Enumerable.d__aa 1.MoveNext() at System.Linq.Enumerable.Count[TSource](IEnumerable 1 источник) в Test.GetTransactionsInPeriod () в Test.CreateChildControls ()

Может кто-нибудь предложить что-нибудь?

1 Ответ

15 голосов
/ 22 сентября 2009

Из сообщения об ошибке похоже, что запрос CAML неправильный. Возможно, вы захотите запустить его через что-то вроде CAML Query Builder U2U для двойной проверки. SharePoint выдает сообщение об ошибке до того, как запрошено приведение. Оглядываясь на это, я думаю, у вас есть лишние <And> в начале (<Where><And><And>)

Кстати: не используйте SPWeb.Lists [Имя]. Это загрузит каждый список в SPWeb (включая метаданные), который довольно ресурсоемкий. Один из методов SPWeb.GetList или SPWeb.Lists.GetList лучше .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...