在搜索sharepoint列表时,我如何确保它不会过滤资本?
本文关键字:确保 过滤 列表 sharepoint 搜索 何确保 | 更新日期: 2023-09-27 18:03:49
我的代码:
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()
,但这似乎没有做的伎俩。
方法字符串。Contains执行区分大小写和不区分区域性的比较,所以如果您想要区分大小写的Contains,请使用IndexOf方法,如
title.IndexOf(r.Title, StringComparison.InvariantCultureIgnoreCase) >= 0
但是在你的代码中,你获取所有的项目和过滤记录,如果列表将包含许多项目,这种方式是不推荐的,因为它涉及到从列表中获取所有的项目。也许最好使用CAML查询(或Sharepoint2010中的LINQ)。你想找什么?字段Title/City/Address包含vars Title/City/Address的值的项目,或者您希望查找字段Title/City/Address值包含vars 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;