EF 4查询 - 问题与多参数

问题描述:

一个手法,通过SQL空的参数的避免过滤是类似以下内容:EF 4查询 - 问题与多参数

​​

这个工作很适合我的LINQ到SQL:

string customerName = "XYZ"; 
var results = 
    (from c in ctx.Customers 
    where (customerName == null || (customerName != null && c.CustomerName == customerName)) 
    select c); 

但是,上面的查询,在ADO.NET EF中,不适用于我;它应该根据客户名称进行过滤,因为它存在,但它不会。而是查询所有客户记录。现在,这是一个简化的例子,因为我有很多我正在使用这种逻辑的领域。但它从不实际过滤,查询所有记录,并导致超时异常。但奇怪的是另一个查询做了类似的事情,没有问题。

任何想法为什么?看起来像是一个bug,或者是否有解决方法?自那以后,我改用了扩展方法。

谢谢。

+0

这个查询是好的(如果多余的!),如书面。在LINQPad中试用。你的问题出现在你没有提到的问题中。 – 2010-11-08 16:51:34

+0

冗余是;实际上,虽然在LINQ to SQL中,有些时候如果我没有使用可为空的类型进行多余的非空检查,它会出错,当我把它放入时,它可以正常工作。可能不是一个字符串的问题,但我有一个习惯,以防万一。 – 2010-11-08 21:11:09

我仍然没有弄清楚,但重写它作为一个proc修复了这个问题,所以这是我的解决方法,就像那样糟糕。

你在where子句中用三元运算符试过吗?

where (customerName == null ? true : c.CustomerName == customerName) 
+0

不,我会试一试。谢谢。 – 2010-11-08 21:11:37

+0

这并未解决问题。不幸的是,它仍然忽略了查询条件。 – 2010-11-09 14:04:29