LinqToSql查询中的条件快捷方式

时间:2009-12-06 10:57:30

标签: c# linq linq-to-sql

这里有一点LinqToSql GOTCHA:

// Returns the number of counties in a state, 
// or all counties in the USA if the state is null
public static int CountCounties(State s) {
  var q = 
    from cy in County.GetTable() // my method to get the ITable
    where (s == null || s.Code == cy.StateCode) // shortcut OR operator, right...?
    select cy;
  return q.Count();
}

猜猜 - 如果将null State对象传递给此方法,则会得到空引用异常!似乎LinqToSql不使用||快捷方式操作符作为快捷方式!

任何提出最佳解释的人都会得到答复。解决方法。

2 个答案:

答案 0 :(得分:6)

如果它是linq to sql那么请记住Linq只是将你的查询解析为SQL。

因此,它将两个where子句发送到数据库,因此异常。我真的没有发现这个令人惊讶的,尽管这可能是错误的。

您只需要进行独立检查。

if (!string.isNullOrEmpty(state.statecode)
     q = q.where( s => s.code == state.statecode

答案 1 :(得分:3)

这与LINQ一般无关。在这种情况下,LINQ-to-SQL提供程序尝试解析您的lambda表达式并使其成为TSQL查询。它不能根据你的表达式做太多的假设,因为它试图将大部分工作委托给数据库。

长话短说,提供商根本无法将其翻译为SQL。