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?