Tôi có một số DBQuery<T>
chuyển đổi thành IQueryable<T>
(bit này hoạt động tốt). Nhưng sau đó tôi đang cố gắng để chuyển đổi các IQueryable một ObjectQuery .. mà không: -Làm cách nào tôi có thể chuyển đổi một DBQuery <T> thành một ObjectQuery <T>?
public void Foo(this IQueryable<T> source)
{
// ... snip ...
ObjectQuery<T> objectQuery = source as ObjectQuery<T>;
if (objectQuery != null)
{
// ... do stuff ...
}
}
này đã từng làm việc trước khi tôi thay đổi theo để Entity Framework 4-CTP5 kỳ diệu Unicorn blah blah blah. Bây giờ, nó không hoạt động - tức là. objectQuery
là null
.
Hiện tại, DBQuery<T> inherits IQueryable<T>
.. vì vậy tôi nghĩ điều này sẽ hiệu quả.
Nếu tôi thay đổi mã để ..
var x = (ObjectQuery<T>) source;
thì ngoại lệ sau đây được ném: -
System.InvalidCastException: Không thể đối tượng dàn diễn viên của loại 'System.Data. Entity.Infrastructure.DbQuery
1[Tests.Models.Order]' to type 'System.Data.Objects.ObjectQuery
1 [Tests.Models.Order] '.
Mọi đề xuất?
Tại sao bạn cần phải cast nó để ObjectQuery? – anon
Tôi nghĩ rằng bạn sẽ cần một phương pháp mà có một DBQuery và xây dựng một ObjectQuery. Đó hoặc một chuyển đổi rõ ràng. Tuy nhiên, tôi nhận ra một trong số đó là một nỗi đau. –
Đây là một câu hỏi thú vị. DbQuery không có mối quan hệ trực tiếp với ObjectQuery, không giống DbContext vs ObjectContext. Tôi nghi ngờ rằng một chuyển đổi trực tiếp là có thể. Một lần nữa, bạn nên kiểm tra lại lý do tại sao bạn cần dàn diễn viên ngay từ đầu. Ngoài ra, đâu là "nguồn" đến từ đâu? – anon