Вопрос

у меня есть который отображает различные элементы в на основе SPView.

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

С использованием SPList.GetItems() отлично работает при использовании SPQuery =>

var itemCollection = SPList.GetItems(SPQuery);

Приведенный выше код дает мне те элементы, которые мне нужны, но, к сожалению, и те, которые мне не нужны.Я хочу получить все элементы из SPView которые соответствуют введенному ключевому слову.

Я обнаружил, что вы можете использовать SPQuery вместе с SPView =>

var itemCollection = SPList.GetItems(SPQuery, "viewName");

Это звучит довольно хорошо, но при более внимательном изучении выясняется, что «viewName» на самом деле должно быть SPViewидентификатор ToStringред.И что, если SPQuery содержит <Where> предложение «viewName» переопределяет этот запрос и просто возвращает каждый элемент в этом конкретном представлении.

Итак, мой вопрос: существует ли способ запроса SPView напрямую или мне придется проделать болезненную работу?


Код решения

Спасибо, Саймон Дой, за подсказку.

var query = new SPQuery(SPList.GetView(ListViewId))
{
    Query = string.Format(string.Concat(
            "<Where>",
                "<Or>",
                    "<Or>",
                        "<Contains>",
                            "<FieldRef Name='Title'/>",
                            "<Value Type='Text'>{0}</Value>",
                        "</Contains>",
                        "<Contains>",
                            "<FieldRef Name='FieldAutoGeneratedName'/>",
                            "<Value Type='Text'>{0}</Value>",
                        "</Contains>",
                    "</Or>",
                    "<Contains>",
                        "<FieldRef Name='FieldATTCode'/>",
                        "<Value Type='Text'>{0}</Value>",
                    "</Contains>",
                "</Or>",
            "</Where>"
            ), param)
};
var items = SPList.GetItems(query);

Приведенный выше код возвращает все элементы из указанного списка, соответствующие param

Это было полезно?

Решение

Как насчет создания объекта SPQuery с использованием конструктора, в который можно передать соответствующий SPView.

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spquery.spquery.aspx

Затем вы можете добавить запрос для включения соответствующих элементов, например:

var query = new SPQuery(spView); 

query.Query = String.Format("<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>{0}</Value></Eq></Where>", keyword);

SPListItemCollection listItems = oList.GetItems(query);

Другие советы

Если SPQuery возвращает все элементы списка, то в большинстве случаев QueryString просто неправильный.(В моем варианте странное) поведение по умолчанию заключается в том, что в случае неправильных строк запроса Caml-Query возвращает ВСЕ элементы.

Например распространенная ошибка:QueryString для SPQuery.Query НЕ ДОЛЖЕН включать тег «<Query>».Если это так, он возвращает все элементы и полностью игнорирует предложение Where.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top