Как преобразовать DBQuery в ObjectQuery?
у меня есть DBQuery<T>
, который превращается в IQueryable<T>
(этот бит работает нормально). Но затем я пытаюсь преобразовать IQueryable в ObjectQuery .. который терпит неудачу: -
public void Foo(this IQueryable<T> source)
{
// ... snip ...
ObjectQuery<T> objectQuery = source as ObjectQuery<T>;
if (objectQuery != null)
{
// ... do stuff ...
}
}
это работало до того, как я перешел на Entity-Framework 4 CTP5 волшебный единорог бла-бла-бла. Теперь, это не работает - т. е. objectQuery
is null
.
теперь DBQuery<T> inherits IQueryable<T>
.. поэтому я подумал, что это должно сработать.
если я изменю код на ..
var x = (ObjectQuery<T>) source;
затем возникает следующее исключение: -
3 ответов
DbQuery<T>
содержит Include
метод, поэтому вам не нужно конвертировать в ObjectQuery
. ObjectQuery
не работает с DbQuery
экземпляр-он завернут во внутренний тип InternalQuery
и оператор преобразования не определен.
кстати. при добавлении using System.Data.Entity
и refrence CTP5 вы сможете позвонить Include
on IQueryable<T>
!
используя отражение, вы можете сделать это:
var dbQuery = ...;
var internalQueryField = dbQuery.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.Name.Equals("_internalQuery"));
var internalQuery = internalQueryField.GetValue(dbQuery);
var objectQueryField = internalQuery.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.Name.Equals("_objectQuery"));
// Here's your ObjectQuery!
var objectQuery = objectQueryField.GetValue(internalQuery) as ObjectQuery<T>;
Не уверен, что вы пытаетесь сделать с ним, но будет dynamic
переменной помочь?
использование типа dynamic (руководство по программированию на C#)