При поиске в списке sharepoint как убедиться, что он не фильтрует капитал? - PullRequest
0 голосов
/ 29 июля 2011

Пока мой код:

List<SearchEntity> results = new List<SearchEntity>();
var title = tbTitle.Text;
var adress = tbAdress.Text;
var city = tbCity.Text;

foreach (var item in list.Items.Cast<SPListItem>().Where(r => title.Contains(r.Title) || adress.Contains((string)r["Adress"]) || city.Contains((string)r["City"])))
{
    var result = new SearchEntity
                     {
                         title = item.Title,
                         adress = (string)item["Adress"],
                         city = (string)item["City"],
                     };
    results.Add(result);
}

return results;

Я пытался привести все значения .ToLower() и .ToUpper(), но, похоже, это не сработало.

1 Ответ

2 голосов
/ 30 июля 2011

Метод String.Contains выполняет сравнение с учетом регистра и без учета культуры, поэтому, если вы хотите, чтобы регистр не учитывал регистр, используйте метод IndexOf, например

title.IndexOf(r.Title, StringComparison.InvariantCultureIgnoreCase) >= 0

, но в своем коде вы выбираете все элементы и фильтруете там записи., если список будет содержать много элементов, этот способ не рекомендуется, так как он включает в себя получение всех элементов из списка.Может быть, лучше использовать CAML Query (или LINQ в Sharepoint2010 ).Что ты хочешь найти?Элементы, в которых поля Title / City / Address содержат значение из заголовка / города / адреса переменной, или вы хотите найти элементы, где поля Title / City / Address содержат значение в заголовке / городе / адресе переменной.В первом случае ваш CAML будет выглядеть так:

List<SearchEntity> results = new List<SearchEntity>();
var title = tbTitle.Text;
var adress = tbAdress.Text;
var city = tbCity.Text;
var query = new SPQuery()
{
    Query = string.Format(
        @"
                    <Where>
                        <Or>
                            <Or>
                                <Contains>
                                    <FieldRef Name=""Title"" />
                                    <Value Type=""Text"">{0}</Value>
                                </Contains>
                                <Contains>
                                    <FieldRef Name=""Adress"" />
                                    <Value Type=""Text"">{1}</Value>
                                </Contains>
                            </Or>
                            <Contains>
                                <FieldRef Name=""City"" />
                                <Value Type=""Text"">{2}</Value>
                            </Contains>
                        </Or>
                    </Where>", title, adress, city)
};
var items = list.GetItems(query);
foreach (var item in items)
{
    var result = new SearchEntity
    {
        title = item.Title,
        adress = (string)item["Adress"],
        city = (string)item["City"],
    };
    results.Add(result);
}
return results;
...