Объедините 2 разных объекта из 2 разных моделей в один запрос Linq to Entities - PullRequest
2 голосов
/ 27 января 2011

У меня есть модель Entity Framework по умолчанию, в которой хранятся все мои таблицы по умолчанию для моего продукта, и что все клиенты имеют общий доступ. Однако у некоторых клиентов у меня есть несколько пользовательских таблиц, которые существуют только для этого клиента, но они относятся к таблицам продукта по умолчанию. У меня есть вторая модель Entity Framework для хранения этих пользовательских таблиц.
У меня вопрос, как я могу сделать запрос Linq to Entities, используя Join, чтобы я мог связать сущности из моей модели по умолчанию с таблицами в моей пользовательской модели? Я не возражаю против того, чтобы не иметь свойства Navigation от пользовательского объекта до объектов в модели по умолчанию; Мне просто нужен способ запросить обе модели в одном запросе.
Ниже приведен код:

  using (ProductEntities oProductDB = new ProductEntities())
  {
    using (ProductEntitiesCustom oProductCustomDB = new ProductEntitiesCustom())
    {
      var oConsulta = oProductCustomDB.CTBLCustoms
                .Where(CTBLCustoms => CTBLCustoms.IDWOHD >= 12)
                .Join(oProductDB.TBLResources,
                     CTBLCustoms => new
                       {
                         CTBLCustoms.IDResource
                       },
                     TBLResources => new
                       {
                         TBLResources.IDResource
                       },
                    (CTBLCustoms, TBLResources) => new
                       {
                         IDCustom = CTBLCustoms.IDCustom,
                         Descricao = CTBLCustoms.Descricao,
                         IDWOHD = CTBLCustoms.IDWOHD,
                         IDResource = CTBLCustoms.IDResource,
                         ResourceCode = TBLResources.Code
                       });

      gvwDados.DataSource = oConsulta;
    }
  }

Я получаю The specified LINQ expression contains references to queries that are associated with different contexts ошибку.
РЕДАКТИРОВАТЬ
Могу ли я объединить 2 ObjectContext в третий, а затем выполнить запрос Linq? Tks

EDIT

Ниже приведен код, который работал с использованием предложенного решения AsEnumerable ():

  using (ProductEntities oProductDB = new ProductEntities())
  {
    using (ProductEntitiesCustom oProductCustomDB = new ProductEntitiesCustom())
    {
      var oConsulta = (oProductCustomDB.CTBLCustoms.AsEnumerable()
                .Where(CTBLCustoms => CTBLCustoms.IDWOHD >= 12)
                .Join(oProductDB.TBLResources,
                     CTBLCustoms => new
                       {
                         CTBLCustoms.IDResource
                       },
                     TBLResources => new
                       {
                         TBLResources.IDResource
                       },
                    (CTBLCustoms, TBLResources) => new
                       {
                         IDCustom = CTBLCustoms.IDCustom,
                         Descricao = CTBLCustoms.Descricao,
                         IDWOHD = CTBLCustoms.IDWOHD,
                         IDResource = CTBLCustoms.IDResource,
                         ResourceCode = TBLResources.Code
                       })).ToList();

      gvwDados.DataSource = oConsulta;
    }
  }

Я добавил AsEnumerable(), как было предложено, но мне пришлось добавить ToList() в конце, чтобы я мог привязать его к DataGridView.

1 Ответ

6 голосов
/ 27 января 2011

Вы не можете сделать это в L2E.Вы можете перенести это в пространство объектов с помощью AsEnumerable(), и это будет работать, но, возможно, будет неэффективно

Объединение ObjectContexts возможно и будет работать, но это должно быть сделано вручную.

...