2011-12-28 31 views
5

tôi có mã này để tìm nút gốc của một cây:Tại sao không sử dụng một công việc Guid nullable trong truy vấn LINQ này?

Guid? currentNode = null; 
var root = db.RecursiveTrees.Where(x => x.ParentId == currentNode).ToList(); 

Truy vấn này trả về 0 kết quả.

Nếu tôi chạy truy vấn này tôi nhận được hàng dự kiến ​​sẽ trở lại:

var root = db.RecursiveTrees.Where(x => x.ParentId == null).ToList(); 

Tại sao không phải là công việc truy vấn đầu tiên (sử dụng phiên bản mới nhất của khuôn khổ tổ chức)?

EDIT:

Cách giải quyết:

List<RecursiveTree> root; 
if (nodeid == null) 
    root = db.RecursiveTrees.Where(x => x.ParentId == null).ToList(); 
else 
    root = db.RecursiveTrees.Where(x => x.ParentId == new Guid(nodeid)).ToList();  

Trả lời

10

Đây là một lỗi được biết đến trong LINQ to Entities khi giao dịch với nullable giá trị các loại. Theo số Connect issue có liên quan, điều này sẽ được khắc phục trong bản phát hành tiếp theo.

+0

cảm ơn - Tôi sẽ thay đổi mã để tránh lọc trên nullable Guid – woggles

+2

Nó vẫn không cố định trong EF 6.1.3. Nếu nó đã từng được sửa, nó lại bị hỏng. – David

0

thử này

Guid? currentNode = null; 
var root = db.RecursiveTrees.Where(x => x.ParentId == currentNode.Value).ToList(); 
+0

vẫn không hoạt động - trông giống như một lỗi trong Khung – woggles

+0

Truy xuất 'Giá trị' từ một Nullable trong đó' HasValue' là sai, sẽ ném một ngoại lệ. – GvS

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