我正在做一个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正在检查搜索字符串是否等于日期时间格式。所以它包含一系列格式,并检查搜索字符串是否为该格式。
请您谈一下“快” - 此刻,你确实有性能问题呢?我首先关注*简单*代码。 –
另外,InputStartWithSearch和DateToString是做什么的? “searchProjects”从哪里来?为什么你的foreach循环中有一个return语句?这对我来说看起来很不对劲。我会专注于首先获得清晰和正确的代码。 –
现在还不行,因为我只使用了大约30个虚拟对象,但是当它连接到它们的数据库时,它将会是1000多个对象。所以它正在工作,但如果有人能够找到一种方法来加快速度,那么现在就应该改变它,而不是在启动和运行时。 – Moelbeck