2011-01-27 40 views
2

我有一个默认的实体框架模型,它包含我的产品的所有默认表,并且所有客户共享。但是,在某些客户中,我有一些只存在于该客户的自定义表格,但它们与默认产品的表格相关。我有第二个实体框架模型来容纳这些自定义表。
我的问题是我如何使用加入使Linq实体查询,所以我可以将我的默认模型的实体与我的自定义模型上的表关联?我不介意没有导航属性从自定义实体到默认模型上的实体;我只需要一种方法来在单个查询中查询两个模型。
下面是代码:将来自2个不同模型的2个不同实体加入到一个Linq to Entities查询中

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查询吗? 韩国社交协会

编辑

下面是工作,使用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。

回答

6

你不能在L2E中做到这一点。你可以用AsEnumerable()将它带入对象空间,它可以工作,但可能效率不高。

合并ObjectContexts是可能的,并且可以工作,但需要手动完成。

+0

Tks。你有一些链接,以便我可以获得更多关于你建议的方法的信息吗? Tks太多了 – Pascal 2011-01-27 15:42:56

相关问题