linq sharepoint sharepoint-2007 list

SharePoint, List.Items y List.GetItems(Query) y Linq



sharepoint-2007 (1)

Del mensaje de error parece que la consulta CAML es incorrecta. Es posible que desee ejecutarlo a través de algo como el generador de consultas CAML de U2U para verificarlo dos veces . El mensaje de error es arrojado por SharePoint antes de los lanzamientos solicitados. Al echarle un vistazo, creo que tienes un <And> extra al principio ( <Where><And><And> )

Por cierto: no use SPWeb.Lists [Name]. Esto cargará todas las listas en el SPWeb (incluidos los metadatos), que requiere un gran uso de recursos. Uno de los métodos SPWeb.GetList o SPWeb.Lists.GetList es mejor .

Siguiendo con las sugerencias, intento usar List.GetItems (Query) para recuperar mi subconjunto de datos inicial en lugar de los contenidos completos de la lista a través de List.Items. Sin embargo, mientras List.Items.Cast () da como resultado un IEnumerable utilizable para Linq, List.GetItems (Query) .Cast () no lo hace.

Código de trabajo:

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();

Código no funcional:

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();

El método List.GetItems (Query) .Cast () produce la siguiente excepción en la línea .Count ():

Microsoft.SharePoint.SPException: no se puede completar esta acción. Inténtalo de nuevo. ---> System.Runtime.InteropServices.COMException (0x80004005): no se puede completar esta acción. Inténtalo de nuevo. en Microsoft.SharePoint.Library.SPRequestInternalClass.GetListItemDataWithCallback (String bstrUrl, Cadena bstrListName, Cadena bstrViewName, Cadena bstrViewXml, SAFEARRAYFLAGS fSafeArrayFlags, ISP2DSafeArrayWriter pSACallback, ISPDataCallback pPagingCallback, ISPDataCallback pSchemaCallback) en Microsoft.SharePoint.Library.SPRequest.GetListItemDataWithCallback (String bstrUrl, Cadena bstrListName, String bstrViewName, String bstrViewXml, SAFEARRAYFLAGS fSafeArrayFlags, ISP2DSafeArrayWriter pSACallback, ISPDataCallback pPagingCallback, ISPDataCallback pSchemaCallback) --- Fin del registro de la pila de excepción interna --- en Microsoft.SharePoint.Library.SPRequest.GetListItemDataWithCallback (String bstrUrl, String bstrListName, String bstrViewName, String bstrViewXml, SAFEARRAYFLAGS fSafeArrayFlags, ISP2DSafeArrayWriter pSACallback, ISPDataCallback pPagingCallback, ISPDataCallback pSchemaCallback) en Microsoft.SharePoint.SPListItemCollection.EnsureListItemsData () en Microsoft.SharePoint.SPListItemCol lection.Undirty () en Microsoft.SharePoint.SPBaseCollection.System.Collections.IEnumerable.GetEnumerator () en System.Linq.Enumerable.d__aa 1.MoveNext() at System.Linq.Enumerable.Count[TSource](IEnumerable fuente 1.MoveNext() at System.Linq.Enumerable.Count[TSource](IEnumerable 1) en Test.GetTransactionsInPeriod () en Test.CreateChildControls ()

¿Alguien puede sugerir algo?