题
我知道下面是可能linq2db4o
from Apple a in db
where a.Color.Equals(Colors.Green)
select a
我需要什么但是什么,允许我建立我的查询有条件地(喜欢我可以在皇宫的其他变体)
public IEnumerable<Apple> SearchApples (AppleSearchbag bag){
var q = db.Apples;
if(bag.Color != null){
q = q.Where(a=>a.Color.Equals(bag.Color));
}
return q.AsEnumerable();
}
在一个真正的世界形势的searchbag将举行许多特性,并建立一个巨大的果树,捕获的所有可能的组合充性质将是疯子的工作。
它可以第一个电话
var q = (from Color c in db select c);
然后从那里继续。但是这不正是我要找的。
免责声明:近重复的 我的问题 近11个月前。
这个是一个比较清楚,因为我了解该问题现在好多了我希望通过现在的一些创建db4o开发的眼睛能抓住这在这样的:
任何建议?
解决方案
是的肯定是能够撰写优化皇宫查询使用的创建db4o.授予该数据库定义如下:
IObjectContainer db;
这是你的查询:
public IEnumerable<Apple> SearchApples (AppleSearchbag bag)
{
var query = db.Cast<Apple> ();
// query will be a Db4objects.Db4o.Linq.IDb4oLinqQuery<Apple>
if (bag.Color != null)
query = query.Where (a => a.Color == bag.Color);
return query;
}
在这种情况下,则查询将要执行的时返回。正在迭代。
另一个可能性是使用IQueryable机制,即具有的优点是更好地认识到开发人员:
public IQueryable<Apple> SearchApples (AppleSearchbag bag)
{
var query = db.AsQueryable<Apple> ();
// query will be a System.Linq.IQueryble<Apple>
if (bag.Color != null)
query = query.Where (a => a.Color == bag.Color);
return query;
}
在这两种情况下,创建db4o将尝试推断优化查询lambda表达在执行,以及如果失败,将退回到皇宫的对象。第一个拥有的优势是更加直接的,通过避免可查询到皇宫,以创建db4o的转变。
不隶属于 StackOverflow