Как лучше всего отсортировать список SPListItems из нескольких списков? - PullRequest
1 голос
/ 03 марта 2011

Мой вопрос больше относится к вопросу "Есть ли лучший способ сделать это", чем к вопросу "Как мне это сделать"?Мой код выглядит следующим образом:

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.

Теперь вопрос в том, есть ли у меня какие-либо способы сделать это более эффективным или "чище"?Любые мысли по этому вопросу приветствуются.

Ответы [ 2 ]

1 голос
/ 03 марта 2011

вы можете добавить предложение orderby к вашему запросу ПОСЛЕ условия where

по возрастанию

<OrderBy> 
   <FieldRef Name="Created" Ascending="True" />
</OrderBy>

по убыванию

<OrderBy> 
   <FieldRef Name="Created" Ascending="false" />
</OrderBy>
0 голосов
/ 04 марта 2011

Если элементы в ваших настраиваемых списках имеют общее управляемое свойство или набор свойств, вы можете создать для них настраиваемую область поиска и запросить эту область вместо того, чтобы обходить каждый список по отдельности.Однако это не сработает, если вам нужны результаты в реальном времени, но если вы настроите свои инкрементные обходы на достаточную частоту выполнения, вы сможете получить свои элементы намного быстрее и проще, особенно если у вас есть много таких пользовательских списков.

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