我们将Xamarin与SQLiteNet一起用作ORM。
在我们的数据层类中,我们有以下方法。
filter = ri => ri.ItemVersioniId == itemVersionId;
该方法获取与ID匹配的记录。如果lambda表达式是硬编码的,则代替逻辑“ filter”,它会更快……即使它是相同的逻辑。
我们将能够将过滤器作为参数传递,但仍然可以获得良好的性能。有什么建议吗?
public virtual List<ResourceItem> GetResourceItems (string itemVersionId, Func<ResourceItem,bool> filter ){
//var t = db.Table<ResourceItem> ().Where (ri => ri.ItemVersionId == itemVersionId); --* this line is 10 times faster
var t = db.Table<ResourceItem> ().Where (filter); --* this line is 10 times slower
return new List<ResourceItem> (t);
}
最佳答案
我不确定,因为它是xamarin
特定的,但我建议使用Expression
而不是Func
。
Expression<Func<ResourceItem,bool>> filter =
ri => ri.ItemVersioniId == itemVersionId;
public virtual List<ResourceItem> GetResourceItems
(string itemVersionId, Expression<Func<ResourceItem,bool>> filter )
{
return db.Table<ResourceItem> ().Where (filter).ToList();
}
关于c# - SQLiteNet索引和Lambda表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18883399/