我有一个默认的Entity Framework模型,它包含我的产品的所有默认表,并且所有客户都共享。但是,对于某些客户,我有一些仅为该客户存在的自定义表,但它们与默认产品的表相关。我有第二个实体框架模型来保存这些自定义表 我的问题是如何使用Join创建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。
答案 0 :(得分:6)
您无法在L2E中执行此操作。您可以使用AsEnumerable()
将其带入对象空间,它可以工作,但可能效率低下。
合并ObjectContexts是可行的,并且可以使用,但需要手动完成。