EF 4查询 - 多参数问题

时间:2010-11-08 16:00:25

标签: c# .net linq entity-framework entity-framework-4

避免在SQL中使用可空参数进行过滤的技巧如下所示:

select * from customers where (@CustomerName is null or CustomerName = @CustomerName)

这在LINQ to SQL中对我很有用:

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

但是上面的查询,在ADO.NET EF中,对我来说不起作用;它应该按客户名称进行筛选,因为它存在,但它不存在。相反,它正在查询所有客户记录。现在,这是一个简化的例子,因为我有许多字段,我正在利用这种逻辑。但它实际上从未过滤,查询所有记录,并导致超时异常。但奇怪的是,另一个查询做了类似的事情,没有任何问题。

任何想法为什么?对我来说似乎是一个错误,或者有解决方法吗?我已经切换到有效的扩展方法。

感谢。

2 个答案:

答案 0 :(得分:0)

您是否在where子句中使用三元运算符进行了尝试?

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

答案 1 :(得分:0)

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