2011-11-08 37 views
20

DBML của tôi hiển thị một tập bản ghi có trường nvarchar không thể thực hiện được. Trường nvarchar nullable này được biểu diễn dưới dạng một chuỗi trong mã C# của tôi.String.IsNullOrEmpty trong LINQ Truy vấn SQL?

Đôi khi trường này là rỗng, đôi khi nó là một chuỗi rỗng và đôi khi nó thực sự có giá trị.

String.IsNullOrEmpty() hoạt động trong LINQ to SQL không? Ví dụ, sẽ công việc sau đây:

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

Bạn có thể thử, LinqPad là firend của bạn. (http://www.linqpad.net/) –

+1

trùng lặp của http://stackoverflow.com/questions/1368946/linq-syntax-where-string-value-is-not-null-or-empty – hatchet

Trả lời

36

Thật kỳ lạ, mỗi MSDN String.IsNullOrEmpty được hỗ trợ (nhờ nó không phải là không được hỗ trợ), nhưng tôi chỉ có thể tìm thấy lời phàn nàn về nó not being supported.

Tuy nhiên, nếu nó không làm việc bạn không nên so sánh một cách rõ ràng đến một giá trị boolean, thay vì:

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

Điều đó didn ' t đã làm việc cho tôi. Profiler chỉ hiển thị kiểm tra chuỗi rỗng, nhưng không chỉ cho giá trị 'null'. –

17

Tôi không biết nếu mà làm việc, nhưng tôi chắc chắn điều này:

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

(khuyên mạnh mẽ parens, máy phát điện truy vấn có thể bị lẫn lộn mà không có họ)

+2

Tôi thích cái này, nhưng tôi đoán giống như 'String.IsNullOrEmpty' không được hỗ trợ mà không có tài liệu cho hiệu ứng đó [toán tử kết hợp rỗng được hỗ trợ mà không cần tài liệu] (http://msdn.microsoft.com/en-us/library /bb882653.aspx)! Oy. – user7116

2

nó không được hỗ trợ kể từ khi cố gắng sử dụng nó kết quả trong một NotSupportedException bị ném với thông báo này:

Phương thức 'Boolean IsNullOrEmpty (System.String)' không được hỗ trợ dịch sang SQL.

Thay vào đó, bạn có thể sử dụng phương pháp này để làm điều tương tự:

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

Bạn cũng có thể sử dụng result.Info != String.Empty thay vì kiểm tra độ dài. Cả hai cách tiếp cận sẽ hoạt động.

Các vấn đề liên quan