在linq to sql中我可以这样做:
var q = db.Colors;
if(! string.IsNullOrEmpty(colorName))
q = q.Where(c=>c.Name.Equals(colorName));
return q.ToList();
在Db4O linq中,我不能这样做,因为我必须从
开始var q = (from Color c in db
select c);
if(! string.IsNullOrEmpty(colorName))
q = q.Where(c=>c.Name.Equals(colorName));
return q.ToList();
这导致
这不是我瞄准的解决方案。 有什么建议吗?
答案 0 :(得分:2)
这样的事情会适合吗?
return (from Color c in db
where !String.IsNullOrEmpty(colorName) && c.Name.Equals(colorName)
select c).ToList();
您还可以使用多个参数:
return (from Color c in db
where (!String.IsNullOrEmpty(colorName) && c.Name.Equals(colorName))
|| (!String.IsNullOrEmpty(color1Name) && c.Name.Equals(color1Name))
|| (!String.IsNullOrEmpty(color2Name) && c.Name.Equals(color2Name))
...
select c).ToList();
答案 1 :(得分:1)
我不确定你的目标是什么。您是否担心在第一种情况下,某些代码会执行服务器端,因此您可以优化返回的值。但在第二种情况下,枚举是在本地完成的,因此对使用的值没有优化?
如果是这样,LINQ to Objects无法避免这种情况。对象在内存中,因此无法避免枚举它们来执行过滤操作。
答案 2 :(得分:0)
如果你拆分表达式怎么办?
IDb4oLinqQuery<Color> q;
if(! string.IsNullOrEmpty(colorName))
{
q = from Color c in db
where c.Name.Equals(colorName)
select c;
}
else
{
q = from Color c in db
select c;
}
return q.ToList();
这样Db4O预处理器可以看到2种不同的LINQ查询?下行偏离当然这个解决方案更冗长,而且不完全是DRY ..