LinqToSql查询中的条件快捷方式
这里有一点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不使用||
捷径运算符作为捷径!
对于这个问题,无论谁提出最好的解释和解决办法,都可以获得答案。
如果它是LINQ到SQL,那么记住Linq只是将你的查询解析成SQL。
因此它将两个where子句发送到数据库,因此是例外。 我真的没有发现这种令人惊讶的事情,尽管它可能是错误的。
你只需要做一个独立的检查。
if (!string.isNullOrEmpty(state.statecode)
q = q.where( s => s.code == state.statecode
这通常与LINQ无关。 在这种情况下,LINQ-to-SQL提供程序试图解析您的lambda表达式并将其设置为TSQL查询。 由于它试图将大部分工作委托给数据库,因此它不能根据您的表达做出太多假设。
长话短说,供应商根本无法将其翻译成SQL。
链接地址: http://www.djcxy.com/p/52811.html上一篇: Conditional shortcuts in LinqToSql query
下一篇: Why does TimeSpan.FromSeconds(double) round to milliseconds?