2010-01-20 87 views
0

我正在使用LINQ编写查询 - 一个查询显示所有活动客户,另一个显示所有活动客户以及非活动客户。如何改进此查询?

if(showall) 
{ 
    var prod = Dataclass.Customers.Where(multiple factors) (all inactive + active) 
} 
else 
{ 
    var prod = Dataclass.Customers.Where(multiple factors & active=true) (only active) 
} 

我可以使用只有一个查询吗?问题是,在这两个查询重复

感谢

回答

3
var customers = Dataclass.Customers.Where(multiple factors); 
var activeCust = customers.Where(x => x.active); 

我真的不明白的问题提出。我不想让这一个班轮,因为这将使由“状态”栏中的代码不可读

+0

'替换你的表达式,谢谢,这有效 – 2010-01-20 17:36:16

0

难道你只是用你的第一个查询返回的所有客户多重因素?如果没有,你会返回活动用户两次。

+0

其实我也有if \ else条件,只有一个查询被触发。 – 2010-01-20 17:12:00

+0

“只有一个查询被解雇” - 那么为什么你问这个问题 – 2010-01-20 17:15:49

+0

我认为你可能需要更新你的问题,这样你就可以包含这样的if/else条件。 – Fermin 2010-01-20 17:23:09

1

我假设你正在努力减少往返次数?

如果“多重因素”是一样的,你可以筛选活跃用户的第一次查询后:

var onlyActive = prod.Where(p => p.active == true); 
+0

我会用'prod.Where(p => p.active)' – 2010-01-20 17:19:17

0

选项我会考虑

  • 将所有客户一次,为了让您可以轻松拆他们分成两组
  • 专注于最小化DB往返。无论您在前端执行什么操作,其成本都要比去DB低一个数量级。
  • 修改用户需求。例如。考虑对结果进行分页 - 最终用户不太可能同时需要所有客户。
+0

我想增加OP关于DB成本的观点。在很多情况下(如果不是大多数情况下),往返数据库所带来的额外开销并不是数据库花费很长时间,而是花费时间来完成请求并将结果传输回客户端。这就像使web服务调用成本不仅仅是调用本地方法一样。 – 2010-01-20 17:38:10

+0

是的。经验法则,对于每个物理层,乘以10,如果不是100,则在某些情况下。 – Ariel 2010-01-20 17:50:39