我正在使用Telerik Data Access执行OR映射。
我正在尝试使用Linq执行连接查询,但不确定如何正确执行。
原始的 sql 查询由:
提供'SELECT O.OPS_LEG_ID, O.ATD_DATE, O.DEP_AIRPORT_ACT, O.ARR_AIRPORT_ACT, O.ATA_DATE, '+
'O.FL_LOG_ATD_DATE, O.FL_LOG_ATA_DATE, O.FL_LOG_DEP_AIRPORT, O.FL_LOG_ARR_AIRPORT, '+
'O.FL_NB, O.DESIGNATOR, O.FL_LOG_ID, O.FL_LOG_STATUS '+
'FROM CREW_ROT_ROLE CR, OPS_LEG O, CREW_ROLES R, CREW_PAIRING_CMP CP '+
'WHERE CR.ROLE_CDE = R.ROLE_CDE '+
'AND CR.CREW_ROTATION_ID = CP.CREW_ROTATION_ID '+
'AND CP.OPS_LEG_ID = O.OPS_LEG_ID '+
'AND CR.CREW_CDE = :CREW_CDE '+
'AND O.ATD_DATE >= :D_FROM '+
'AND O.ATD_DATE <= :D_TO '+
//'AND R.ROLE_TYPE = 0 '+
'ORDER BY O.ATD_DATE
已从SQL表生成相应的实体。我现在正在尝试构建等效的Linq查询,这似乎不起作用:
var results = from opsLeg in dbContext.OPS_LEGs
from crewRotationRole in dbContext.CREW_ROT_ROLEs
from crewRole in dbContext.CREW_ROLEs
from crewPairingComponent in dbContext.CREW_PAIRING_CMPs
where crewRotationRole.ROLE_CDE == crewRole.ROLE_CDE
&& crewRotationRole.CREW_ROTATION_ID == crewPairingComponent.CREW_ROTATION_ID
&& crewPairingComponent.OPS_LEG_ID == opsLeg.OPS_LEG_ID
&& crewRotationRole.CREW_CDE == userId
select new { OpsLegId = opsLeg.OPS_LEG_ID,
Designator = opsLeg.DESIGNATOR,
FlightNumber = opsLeg.FL_NB
};
尝试上一个查询,引发异常:
&#34;标识符&#39; ROLE_CDE&#39;不是参数或变量或字段 &#39; FlightLogEntities.OPS_LEG&#39 ;.如果&#39; ROLE_CDE&#39;是一个属性,请添加 FieldAlias或Storage属性或将其声明为字段 。别名&#34;
不确定如何继续。使用Linq连接的正确查询是什么?谢谢!
答案 0 :(得分:0)
如果您正在使用类似于Entity框架的ORM,那么概念模型将是类的混合,这将提供以对象为中心的数据视图。
因此,您将使用Linq on Objects,在这种情况下,您不需要像在SQL中为数据库那样编写连接查询。概念模型将包含使用导航属性具有关系的对象,并且要访问导航属性,您可以将其作为对象的属性进行访问。
例如,如果数据库中有2个表,则客户&amp;命令。以下SQL语句将返回客户编号1的所有订单:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
Where Customers.CustomerID = 1
如果我们使用EF生成从Database生成概念模型,我们将获得Customer和Order的类,而Customer类将具有ICollection的属性。因此,如果您需要与上述SQL查询相同的结果,则可以按照以下方式执行此操作
var CustomerOne = context.Customers.Where(x => x.CustomerID == 1);
var ordersForCustomerOne = CustomerOne.Orders;
答案 1 :(得分:0)
您可以尝试类似
的内容var k = from r in dataContext.Order_Details
join t in dataContext.Orders on r.OrderID equals t.OrderID
select r.OrderID ;