Vb.net 实体框架左连接两个数据库
我需要使用实体框架将列表连接到数据库查询。 基本上,我有两个数据库,需要将一个表从一个数据库外部连接到另一个数据库中的表。 为了做到这一点,我考虑从数据库1中获取一个列表,然后将其左键连接到第二个查询的查询。 问题是,我必须将结果作为IQueryable返回,因此方法的使用者可以在执行查询之前对查询进行额外的过滤 我尝试了两种不同的方法: 备选案文1:Vb.net 实体框架左连接两个数据库,vb.net,entity-framework,Vb.net,Entity Framework,我需要使用实体框架将列表连接到数据库查询。 基本上,我有两个数据库,需要将一个表从一个数据库外部连接到另一个数据库中的表。 为了做到这一点,我考虑从数据库1中获取一个列表,然后将其左键连接到第二个查询的查询。 问题是,我必须将结果作为IQueryable返回,因此方法的使用者可以在执行查询之前对查询进行额外的过滤 我尝试了两种不同的方法: 备选案文1: Public Shared Function List() As IQueryable(Of ContractEquipment) ' Get
Public Shared Function List() As IQueryable(Of ContractEquipment)
' Get Subcontractors from Database 1
Dim subcontractors As List(Of SubContractor) = GetSubContractorList().ToList()
' Query Database 2
Return (From c In DB.ContractEquipments
Select New With {
.ContractID = c.ContractID,
.EquipmentID = c.EquipmentID,
.Inactive = c.Inactive,
.SubContractorName = (From x In subcontractors Where c.SubContractorID = x.SubContractorID Select x.Name).FirstOrDefault()
})
端函数
备选案文2:
Public Shared Function List() As IQueryable(Of ContractEquipment)
' Get Subcontractors from Database 1
Dim subcontractors As List(Of SubContractor) = GetSubContractorList().ToList()
' Query Database 2
Return (From c In DB.ContractEquipments
Group Join s in subcontractors on c.SubContractorID equals s.SubContractorID into tblSubContractors = Group
Select New With {
.ContractID = c.ContractID,
.EquipmentID = c.EquipmentID,
.Inactive = c.Inactive,
.SubContractorName = tblSubContractors.Select(Function(z) z.Name).FirstOrDefault()
})
端函数
我总是会遇到同样的错误:
无法创建类型为的常量值。此上下文中仅支持基元类型('如Int32、String和Guid')
有人有什么建议吗?好的,我找到了解决办法。 在数据库2中创建了一个视图:
CREATE VIEW dbo.ViewContractEquipment
AS SELECT e.ContractEquipmentID, s.Name as SubContractorName
FROM dbo.ContractEquipments AS e
LEFT OUTER JOIN DB2.dbo.SubContractors AS s ON e.SubContractorID = s.SubContractorID
然后,我将视图添加到查询中,并将其与主表联接:
Return (From d In DB.ViewContractEquipments
Join c in DB.ContractEquipments ON c.ContractEquipmentID equals d.ContractEquipmentID
Select New With {
.ContractID = c.ContractID,
.EquipmentID = c.EquipmentID,
.Inactive = c.Inactive,
.SubContractorName = d.SubContractorName
})
不优雅,但它的工作