オブジェクトのリストを検索するためのテキスト ボックスがある 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 は、検索文字列が Datetime 形式と等しいかどうかをチェックしています。したがって、形式の配列が含まれており、検索文字列がその形式であるかどうかを確認します。