AFAIK không hỗ trợ CTE đệ quy trong LINQ cũng như trong EF. Giải pháp là để hiển thị CTE dưới dạng một khung nhìn. Bài viết về truy vấn đệ quy hoặc phân cấp sử dụng EF Code First và Migrations chỉ ra cách triển khai dạng xem như vậy bằng cách sử dụng EF code first migrations.
Cố gắng mô phỏng CTE bằng cách thực hiện lặp lại phía máy khách đệ quy không mở rộng đến các tập dữ liệu lớn và dẫn đến trao đổi trò chuyện với máy chủ. Lưu ý cách mã EF của bạn trả về IEnumerable
không phải IQueryable
, có nghĩa là nó hiện thực hóa từng cấp độ và sau đó nối cấp độ tiếp theo cho mỗi mục nhập như một yêu cầu riêng biệt . Giải pháp dựa trên LINQ sẽ hoạt động hợp lý cho các cấu trúc phân cấp nông với số lượng mục nhập hạn chế (và lưu ý rằng nhiều dự án có thể có bố cục dữ liệu như vậy, bài đăng / câu trả lời của người dùng là một ví dụ điển hình), nhưng sẽ sụp đổ theo phân cấp sâu với nhiều yếu tố.