2011-07-21 25 views
12

Cú pháp chính xác trong LINQ để tìm các bản ghi không rỗng là gì? Tôi đang sử dụng mã bên dưới nhưng không có kết quả.không null trong LINQ

Cảm ơn bạn rất nhiều vì đã giúp đỡ.

   var list = (from t in dal.table 
          where t.name != null); 
+1

Loại dữ liệu của tên là gì? – Clayton

Trả lời

23

Bạn quên select.

var list = (from t in dal.table 
      where t.name != null 
      select t); 
+0

Cảm ơn tôi đã quên mất điều đó. Nhưng khi tôi có lựa chọn, tôi vẫn không nhận được các bản ghi có giá trị trong trường tên. – MdeVera

+0

@MdeVera: Bạn có cần 'string.IsNullOrEmpty' không? (Không chắc chắn, chỉ là một phỏng đoán.) – Mehrdad

+0

@MdeVera: Hãy chắc chắn rằng chúng thực sự vô giá trị. Thiếu 'select' là tất cả những gì tôi có thể nghĩ ngay bây giờ – BoltClock

2

tôi gặp phải những hành vi kỳ lạ như vậy. C# code đang

public DbSet<Document> Documents { get; set; } 
List<Document> = Documents 
    .Where(d => d.BusinessId = 818) 
    .Where(d => d.CurrencyId != null) 
    .ToList(); 

nhưng câu lệnh SQL được tạo ra là thế này:

exec sp_executesql N'SELECT 
[Extent1].[DocumentId] AS [DocumentId], 
[Extent1].[DateCreated] AS [DateCreated], 
... 
FROM [dbo].[Documents] AS [Extent1] 
WHERE [Extent1].[BusinessId] = @p__linq__0',N'@p__linq__0 int',@p__linq__0=818  

Rõ ràng LINQ bỏ qua .Where (d => d.CurrencyId = null!) Khoản.

Giải pháp của tôi là như sau:

List<Document> = Documents 
    .Where(d => d.BusinessId = 818) 
    .ToList() // <== Gel all documents and filter in memory 
    .Where(d => d.CurrencyId != null) 
    .ToList(); 

Lưu ý: Về mặt kỹ thuật, chúng tôi di chuyển các bộ lọc KHÔNG Null từ LINQ-to-SQL để đối tượng LINQ-To-.

Rất kém hiệu quả vì chúng tôi chọn TẤT CẢ tài liệu vào bộ nhớ và lọc ở đó (thay vì lọc ở cấp db).

Tôi trường hợp của tôi số lượng hồ sơ thường nhỏ nên giải pháp đã hiệu quả đối với tôi.

+0

Điều này sẽ gợi ý rằng mô hình của bạn không phù hợp với cơ sở dữ liệu thực - rằng mô hình là cho một cơ sở dữ liệu trong đó 'CurrencyId' không phải là nullable. – hvd

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