Vì vậy, tôi đang cố gắng để trở lại một bộ sưu tập của người có ID được chứa trong một bộ sưu tập được tạo ra tại địa phương của id (IQueryable)làm việc xung quanh LinqToSQls "truy vấn với các bộ sưu tập địa phương không được hỗ trợ" ngoại lệ
Khi tôi chỉ định " bộ sưu tập được tạo cục bộ ", tôi có nghĩa là bộ sưu tập Id không đến từ truy vấn LinqToSql và đã được tạo lập trình (dựa trên đầu vào của người dùng). truy vấn của tôi trông như thế này:
var qry = from p in DBContext.People
where Ids.Contains(p.ID)
select p.ID;
Điều này làm cho ngoại lệ sau đây ...
"truy vấn với các bộ sưu tập địa phương không được hỗ trợ"
Làm thế nào tôi có thể tìm thấy tất cả các dân với một id mà được chứa trong bộ sưu tập Id được tạo cục bộ của tôi?
Có thể sử dụng LinqToSql không?
Tôi nghĩ giải pháp cho vấn đề của bạn có nhiều sắc thái hơn câu trả lời này. Tôi đang sử dụng cùng một cấu trúc (một phương thức chứa trên một IQueryable trong một mệnh đề WHERE) thành công, và LINQ to SQL dịch nó thành một mệnh đề WHERE EXISTS trong truy vấn SQL. Dường như nó hoạt động trong một số tình huống và không phải là tình huống khác, vì vậy bạn nên đăng cách bạn nhận được Id của mình IQueryable, vì điều đó có thể làm sáng tỏ một số vấn đề. –
@jmbledsoe nếu câu trả lời của tôi không đủ rõ ràng: L2S mong đợi một IEnumerable cục bộ (không phải là một IQuery có thể trì hoãn) được chuyển tới Enumerable.Contains. Nếu bạn chuyển cho nó một truy vấn cục bộ, thì nó không thể được dịch sang truy vấn SQL. Nếu bạn vượt qua nó một danh sách/mảng/etc thì nó có thể được dịch sang một mệnh đề SQL "where ... in (x, y, ..., n)". – KristoferA
Tôi nghĩ rằng tôi thấy những gì bạn đang nói: - Vượt qua một danh sách/Array/etc. là OK b/c nó sẽ tạo ra một mệnh đề WHERE ... IN. - Vượt qua một IQuery có thể hoãn lại là OK b/c nó sẽ tích hợp với truy vấn bị trì hoãn hiện tại. - Vượt qua một IEnumerable cục bộ là KHÔNG OK, nhưng bạn chỉ có thể .ToList() nó và nó sẽ ổn. –