2011-11-08 15 views
20

DBML'mn boş bir nvarchar alanı olan bir kayıt kümesi ortaya çıkıyor. Bu nullable nvarchar alanı C# kodumda bir dize olarak temsil edilir.String.IsNullOr LINQ'taki SQL sorgusuna mı?

Bazen bu alan boştur, bazen boş bir dizedir ve bazen de bir değeri vardır.

String.IsNullOrEmpty(), LINQ To SQL'de çalışır mı? Örneğin, olur şu işleri:

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

Denemeyi deneyebilirsin, LinqPad senin ateşin. (http://www.linqpad.net/) –

+1

http://stackoverflow.com/questions/1368946/linq-syntax-where-string-value-is-not-null-or-empty sayfasının kopyası – hatchet

cevap

36

İlginçtir ki, MSDN String.IsNullOrEmpty başına (desteklenmeyen olmama sayesinde) desteklenir, ama ben sadece o not being supported ilgili şikayetler bulabilirsiniz. eğer inşaat bilmiyorum

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

Benim için çalıştı. Profilci sadece boş dizgeyi kontrol etti, ancak "null" değeri için değil. –

17

ama bunu yapar eminim:

Ancak çalışır eğer, açıkça yerine, bir boolean değerine karşılaştırmak gerekir

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

+2

Bunu beğendim, ama sanırım 'String.IsNullOrEmpty 'bu belgenin dokümantasyonu olmadan desteklenmiyor [null coalesce operatörü belgeler olmadan destekleniyor] (http://msdn.microsoft.com/en-us/library /bb882653.aspx)! Oy. – user7116

2

o ile atılan bir NotSupportedException sonuçlanır kullanmaya çalışırken beri desteklenmiyor (kuvvetle sorgu jeneratör onlarsız karıştı alabilirsiniz parens tavsiye) Bu mesajı:

Yöntem 'Boole IsNullOrEmpty (System.String)' SQL için desteklenen çevirisi vardır.

Bunun yerine, aynı şeyi yapmak için bu yaklaşımı kullanabilirsiniz: Ayrıca uzunluğunu kontrol yerine result.Info != String.Empty kullanabilir

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

. Her iki yaklaşım da işe yarayacak.

İlgili konular