Подтвердить что ты не робот

Как преобразовать 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 < > '"

Любая помощь очень ценится!

4b9b3361

Ответ 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'");