2011-11-08 4 views
20

내 DBML은 nullable nvarchar 필드가있는 레코드 집합을 노출합니다. 이 nullable nvarchar 필드는 C# 코드에서 문자열로 표시됩니다.LINQ의 String.IsNullOrEmpty To SQL 쿼리?

간혹이 필드는 null이며 때로는 빈 문자열이며 때로는 실제로 값을 갖습니다.

String.IsNullOrEmpty()은 LINQ To SQL에서 작동합니까? 예를 들어,하고자 다음과 같은 작업 :

var results = from result in context.Records 
       where String.IsNullOrEmpty(result.Info) == false 
       select result; 
+1

LinqPad를 사용해보십시오. (http://www.linqpad.net/) –

+1

중복의 http://stackoverflow.com/questions/1368946/linq-syntax-where-string-value-is-not-null-orempty – hatchet

답변

36

호기심, MSDN String.IsNullOrEmpty 당 (이 지원되지 않는되지 않는 덕분에) 지원, 그러나 나는 단지 그것을 not being supported에 대한 불만을 찾을 수 있습니다. 그 작동하는지 모르겠어요

var results = from result in context.Records 
      /*XXX broke :(where !String.IsNullOrEmpty(result.Info) */ 
      where !(result.Info == null || result.Info.Equals("")) 
      select result; 
+1

그 didn ' 나를 위해 일했다. 프로파일 러는 빈 문자열에 대해서만 확인했지만 'null'값에 대해서는 확인하지 않았습니다. –

17

,하지만 난이가하는 확신 :

그러나 그것이 작동 않는 경우에, 당신은 명시 적으로 대신 부울 값으로 비교해서는 안

where (result.Info ?? "") != "" 

+2

나는 이것을 좋아하지만, 'String.IsNullOrEmpty'가 문서 없이는 지원되지 않는다고 생각한다. [null coalesce 연산자는 문서없이 지원된다] (http://msdn.microsoft.com/en-us/library) /bb882653.aspx)! 오우. – user7116

2

는 그것은 슬로우되는 NotSupportedException 결과 사용하기 때문에 지원되지 않습니다 (강하게 쿼리 생성기는 그들없이 혼란스러워 할 수 괄호를 추천) 이 메시지 :

방법 '부울 IsNullOrEmpty (선택 System.String)'SQL에 지원되는 번역이 없습니다.

대신, 당신은 같은 일을하기 위해이 방법을 사용할 수 있습니다 : 당신은 또한 길이를 확인하는 대신 result.Info != String.Empty를 사용할 수 있습니다

var results = from result in context.Records 
       where result.Info != null && result.Info.Length > 0 
       select result; 

. 두 가지 방법 모두 효과적입니다.