以下查询需要一段时间才能返回:
db.Query<Person>(x => x.StartsWith("Chr", StringComparison.CurrentCultureIgnoreCase))
有没有办法让这个工作正常?即更快?
答案 0 :(得分:2)
也许你遇到了db4o’s query-optimization的限制。通常,本机查询和LINQ查询被转换为低级SODA-query。当此优化失败时,db4o将实例化数据库中的对象以执行查询。你可以想象这可能很慢。
目前最好的解决方案是在这种情况下直接使用SODA。例如,具有一个属性的类:
public class SimpleObject
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
这样的原生查询:
var result = db.Query<SimpleObject>(x => x.Name.StartsWith ("Chr",StringComparison.CurrentCultureIgnoreCase));
可以用此SODA-Query表示:
IQuery query = db.Query();
query.Constrain(typeof (SimpleObject)); // restrict to a certain class
query.Descend("name").Constrain("Chr").StartsWith(false); // the field 'name' starts with 'chr', case-insensitive
foreach (var s in query.Execute())
{
//
}
我希望查询优化器的未来版本可以直接支持这种情况。
答案 1 :(得分:0)