2009-08-06 30 views
7

tôi có một đối tượng thực thể 'Người dùng' mà thực hiện 'IUser':Cách tốt nhất để đúc từng mục trong truy vấn LINQ to Entities thành một giao diện là gì?

IQueryable<User> users = Db.User; 
return users; 

Nhưng những gì tôi thực sự muốn trở lại là:

IQueryable<IUser> 

Vì vậy, cách tốt nhất để chuyển đổi

là gì
IQueryable<User> 

đến

IQueryable<IUser> 

mà không thực sự chạy truy vấn? Ngay bây giờ tôi đang làm điều này nhưng có vẻ như một hack:

IQueryable<IUser> users = Db.User.Select<User, IUser>(u => u); 
+1

Craig Stuntz là chính xác: L2E không hỗ trợ phương thức Truyền. Nếu không thành công với: "Không thể bỏ kiểu 'MyType' để nhập 'MySubTypet'. LINQ to Entities chỉ hỗ trợ truyền các kiểu nguyên thủy của Mô hình dữ liệu thực thể." Tôi đã xóa câu trả lời của mình vì nó không cung cấp bất kỳ giá trị nào. –

+0

Điều này không mong muốn tải kết quả? nó không nhận được toàn bộ bảng khi cho mỗi phần của truy vấn? – Maslow

+0

Phiên bản .NET nào? Trong .NET 4 bạn sẽ có thể gán bất kỳ IQueryable nào vào một biến loại IQueryable mà không cần một dàn diễn viên của tất cả các mục nhập là danh sách ... – jessehouwing

Trả lời

5

Giải pháp "hacky" của bạn có vẻ ổn với tôi.

+0

Chính xác của bạn. Tôi vừa làm một bài kiểm tra nhanh. (+1) –

+0

Tôi vừa thử với ngoại lệ sau: Biểu thức 'TypeAs' với đầu vào loại 'Bla.User' và kiểm tra loại 'Bla.IUser' không được hỗ trợ. Chỉ các loại thực thể và kiểu phức hợp mới được hỗ trợ trong các truy vấn LINQ to Entities. –

+0

Cảm ơn bạn đã kiểm tra. Tôi sẽ loại bỏ các thay thế. –

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