这里有一点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不使用||
快捷方式操作符作为快捷方式!
任何提出最佳解释的人都会得到答复。解决方法。
答案 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。