2009-12-06 4 views
5

여기에 약간의 LinqToSql 잡았다는 다음과 같습니다조건부 바로 가기

// 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(); 
} 

무엇을 추측 -이 방법에 널 State 개체를 전달할 경우, 당신은 null 참조 예외를 얻을! LinqToSql은 바로 가기로 || 바로 가기 연산자를 사용하지 않는 것 같습니다!

답 신용은 가장 좋은 설명 인 & 해결 방법을 제안합니다.

+0

이 LinqToSql입니까? –

+0

'정상적인'Linq 비슷한 쿼리가 나를 위해 잘 작동합니다. –

+0

예, LinqToSql입니다. - 죄송합니다. 질문을 편집 할 것입니다. –

답변

6

만약 Linq가 SQL에 있다면 Linq가 쿼리를 SQL로 구문 분석하고 있음을 기억하십시오.

따라서 where 절을 데이터베이스에 모두 보내므로 예외가 발생합니다. 논란의 여지는 있지만 틀림없이 이것이 놀랍습니다.

당신은 단지 독립적 인 점검을해야 할 것입니다.

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

+1 나는 람다를 사용하여 쿼리에 추가하는 아이디어를 좋아합니다. –

3

이것은 일반적으로 LINQ와 관련이 없습니다. 이 경우 LINQ-to-SQL 공급자는 람다 식을 구문 분석하여 TSQL 쿼리로 만듭니다. 대부분의 작업을 데이터베이스에 위임하려고하므로 표현식을 기반으로 너무 많은 가정을 할 수 없습니다.

간단히 말해서 공급자는 단순히 SQL로 변환 할 수 없습니다.