Мой вопрос больше относится к вопросу "Есть ли лучший способ сделать это", чем к вопросу "Как мне это сделать"?Мой код выглядит следующим образом:
private List<SPListItem> GetListItemsFromSite(SPSite spSite)
{
List<SPListItem> listItems = new List<SPListItem>();
List<SPList> documentLibrariesInSite = GetCustomDocumentLibrariesInSite(spSite);
foreach (SPList spList in documentLibrariesInSite)
{
SPListItemCollection itemCollection = GetLatestDocumentsFromSPList(spList);
foreach(SPListItem item in itemCollection)
{
listItems.Add(item);
}
}
listItems.Sort((x, y) => ((DateTime) x[SPBuiltInFieldId.Created]).CompareTo(((DateTime) y[SPBuiltInFieldId.Created])));
listItems.Reverse();
return listItems;
}
private SPListItemCollection GetLatestDocumentsFromSPList(SPList spList)
{
SPQuery query = new SPQuery();
query.Query = "<Where><Gt><FieldRef Name=\"Created\" /><Value Type=\"DateTime\"><Today OffsetDays=\"-7\"</Value></Gt></Where>";
query.ViewAttributes = "Scope=\"Recursive\"";
query.RowLimit = NumberOfDocumentsToGet;
SPListItemCollection listItemCollection = spList.GetItems(query);
return listItemCollection;
}
private List<SPList> GetCustomDocumentLibrariesInSite(SPSite spSite)
{
List<SPList> listCollection = new List<SPList>();
foreach (SPWeb spWeb in spSite.AllWebs)
{
foreach (SPList spList in spWeb.Lists)
{
if (spList.TemplateFeatureId == CustomContentTypeFeatureGuid)
{
listCollection.Add(spList);
}
}
spWeb.Dispose();
}
return listCollection;
}
Поскольку я хочу, чтобы элементы списка были отсортированы по дате создания, прежде чем я верну элементы, я делаю сортировку на основе поля CreatedDate в SPListItem.Я также не использую SPSiteDataQuery, потому что хочу манипулировать полученными SPListItems.
Теперь вопрос в том, есть ли у меня какие-либо способы сделать это более эффективным или "чище"?Любые мысли по этому вопросу приветствуются.