我正在做一个 Web 应用程序,其中有一个用于搜索对象列表的文本框。
对象是这样的:
public class Project : IDbProject
{
public string ProjectName { get; set; }
public string Country { get; set; }
public string Customer { get; set; }
public DateTime UploadDate { get; set; }
public DateTime CreateDate { get; set; }
public string CreatedBy { get; set; }
}
, 列表是IList<IProject>
. 我的搜索/过滤正在通过列表,并与对象中的每个字符串进行比较,例如:
public IList<IProject> GetSearchedProjects(string searchString)
{
foreach (var proj in _projects)
{
if (InputStartWithSearch(proj.ProjectName, searchString) && !searchProjects.Contains(proj))
{
searchProjects.Add(proj);
continue;
}
if (InputStartWithSearch(proj.Country, searchString) && !searchProjects.Contains(proj))
{
searchProjects.Add(proj);
continue;
}
if (InputStartWithSearch(proj.CreatedBy, searchString) && !searchProjects.Contains(proj))
{
searchProjects.Add(proj);
continue;
}
if (InputStartWithSearch(proj.ProjectState, searchString) && !searchProjects.Contains(proj))
{
searchProjects.Add(proj);
continue;
}
if (IsStringDate(searchString))
if (IsDatesEqual(proj.CreateDate, searchString) && !searchProjects.Contains(proj))
{
searchProjects.Add(proj);
}
}
return searchProjects;
}
return _projects;
}
正如你所看到的,我已经做了很多私有方法来检查搜索字符串与对象的字符串/日期/任何东西。这一切都很好。
但是有没有更好/更快的方法来通过单个字符串在对象列表中搜索?
编辑
方法InputStartWithSearch
和IsStringDate
是私有方法,我检查输入字符串是否以项目数据开头。因此,如果 CreatedBy 是“Matthi Smith Junior”,并且我搜索了“Matthi Junior”、“Matthi Smith”、“Smith Junior”等,它会添加它。
IsStringDate 正在检查搜索字符串是否等于日期时间格式。所以它包含一个格式数组,并检查搜索字符串是否为该格式。