我有一种搜索数据库中人员的方法。我想重构它,以便它使用hashsets来提高性能。
我在下面做了一个简化的例子(不会编译,只是为了给你一个想法)。
我的示例中是否可以使用HashSet
?
using (var context = new MyEntities())
{
var persons = new HashSet<PERSON>(context.PERSON);
if(!string.IsNullOrEmpty(age))
{
persons = persons.Where(p => p.age == age);
}
if(!string.IsNullOrEmpty(name))
{
persons = persons.Where(p => p.name.StartsWith(name));
}
//some similar filtering...
return persons.ToList();
}
答案 0 :(得分:1)
正如评论中所述,以下代码行不是一个好主意
var persons = new HashSet<PERSON>(context.PERSON);
因为它会从PERSON
DbSet
中提取所有数据并将其插入person
对象。
您的代码几乎尽可能优化,而无需将所有数据读入HashSet
。
我建议您构建一个IQueryable
对象,该对象将触发相关的定制Sql来过滤您的数据。在您调用ToList()
var persons = context.PERSON.AsQueryable();
if(!string.IsNullOrEmpty(age))
{
persons = persons.Where(p => p.age == age);
}
if(!string.IsNullOrEmpty(name))
{
persons = persons.Where(p => p.name.StartsWith(name));
}
//some similar filtering...
return persons.ToList();