Как преобразовать DbSet в инфраструктуру Entity в ObjectQuery
Я использую подход CodeFirst и столкнулся с проблемой, когда мне нужно преобразовать DbSet в ObjectQuery.
Это то, что я сделал для преобразования.
ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext;
ObjectSet<Request> objectSet = objectContext.CreateObjectSet<Request>();
где db - это контекст, наследующий от DbContext, а Request - класс.
Итак, когда я пытаюсь вызвать метод, ожидающий ObjectQuery как ObjectQueryMethod (objectSet), он выдает следующую ошибку.
"Тип условного выражения не может быть определен, потому что нет никакого неявного преобразования между 'System.Data.Entity.DbSet < > ' и 'System.Data.Objects.ObjectQuery < > '"
Любая помощь очень ценится!
Ответы
Ответ 1
Я нашел ответ. Конечно, можно преобразовать DbSet в инфраструктуру Entity в ObjectQuery, используя приведенные ниже строки кода.
ObjectContext objectContext = ((IObjectContextAdapter)db).ObjectContext;
ObjectSet<Request> objectSet = objectContext.CreateObjectSet<Request>("Requests");
где
-
db
- Наследование класса контекста из DbContext
.
-
Requests
- DbSet<Request>
, определенный в классе Context.
-
objectSet
- теперь можно передать как ObjectQuery
.
Ответ 2
Спасибо за правильный ответ "вдохновляющий"; это просто для уточнения вашего ответа. Мне удалось сделать это с общим типом, поэтому просто для его использования:
private List<T> GetByCustomCriteria<T>(string criteria) where T: class
{
var objectContext = ((IObjectContextAdapter)_myModelEntities).ObjectContext;
//note: _myModelEntities is a DbContext in EF6.
var objectSet = objectContext.CreateObjectSet<T>();
return new List<T>(objectSet.Where(criteria));
}
И я подумал, что вышеприведенный пост мог бы сделать пример того, какие критерии отправить сюда вот пример:
//sample criteria for int field:
var myClientById = GetByCustomCriteria<Client>("it.Id == 1");`
//sample criteria for string field, note the single quotes
var myClientByName = GetByCustomCriteria<Client>("it.Surname == 'Simpson'");