c# - 扩展相关子查询以在 LINQ 中包含另一个查询

标签 c# .net linq

我正在尝试扩展相关子查询以在 LINQ 中包含另一个查询。 在 SQL 中,这就是查询。

SELECT V.Car_ID
FROM VEHICLES V, AGREEMENTS A, AGREEMENTS A1
WHERE A.Car_ID = V.Car_ID
AND enDate >= A.Hire_Start_Date
AND stDate <= A.Hire_End_Date
AND A1.CAR_ID = V.CAR_ID
AND location = A1.Return_Location
AND A1.Return_date =
 (SELECT MAX(A2.Return_Date)
 FROM AGREEMENT A2
 WHERE A2.VEHICLE_ID = V.VEHICLE_ID
 AND A2.Return_Date < stDate)**

在一些帮助下,我已经查询了车辆是否有协议(protocol),但我似乎无法扩展它以检查 AGREEMENT 返回位置是否与搜索位置匹配。到目前为止,这是我的代码。

var cars = from v in db.VEHICLEs
                   where !db.AGREEMENTs.Any(a => (a.CAR_ID == v.CAR_ID
                   && a.STATUS_OPEN == true
                   && enDate >= a.HIRE_START_DATE
                   && strtDate <= a.HIRE_END_DATE))
                   select v;

我的工作 LINQ 查询中缺少 sql 查询的以下部分。

AND A1.CAR_ID = V.CAR_ID
AND location = A1.Return_Location
AND A1.Return_date =
 (SELECT MAX(A2.Return_Date)
 FROM AGREEMENT A2
 WHERE A2.VEHICLE_ID = V.VEHICLE_ID
 AND A2.Return_Date < stDate)**

如有任何帮助,我们将不胜感激。

最佳答案

您的 Sql 查询是一个内连接,因此在 Linq 中您可以:

var cars =  from v in db.VEHICLEs
            from a in db.AGREEMENTs
            from a1 in db.AGREEMENTs
            where a.CAR_ID == v.CAR_ID
                && enDate >= a.HIRE_START_DATE
                && strtDate <= a.HIRE_END_DATE
                && a1.CAR_ID == v.CAR_ID
                && location == a1.RETURN_LOCATION
                && a1.RETURN_DATE == db.AGREEMENTs
                    .Where(a2 => a2.VEHICLE_ID == v.VEHICLE_ID)
                    .Max(a2 => a2.RETURN_DATE)
            select v.CAR_ID;

要选择其他字段,您可以select new { CarId = v.CAR_ID, ... }

关于c# - 扩展相关子查询以在 LINQ 中包含另一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50197792/

相关文章:

c# - 将 Include in Entity Framework 4 与 lambda 表达式结合使用

c# - CloseHandle() 给出异常 : External component has thrown an exception

c# - LINQ 复合聚合

c# - 比较两个节点列表的总匹配度

c# - 如何使用 OpenXML 从 Excel 工作表中检索选项卡名称

C# Mongo 查询效率

c# - 在 C# 中创建一组静态常量变量

c# - 部署 .NET C++/CLI DLL 的先决条件?

c# - 如何在 c# 中覆盖或创建括号 "[]"的自定义行为?

c# - 动态 linq group by 子句