【问题标题】:Convert Join SQL to LINQ-to-SQL Method Syntax将 Join SQL 转换为 LINQ-to-SQL 方法语法
【发布时间】:2013-06-14 23:46:38
【问题描述】:

我有一个 MVC 4 Web API 的存储库,用于使用 Linq 到 SQL 方法语法从数据库中检索数据。到目前为止,我对 a 实用程序的代码(不多):

public IQueryable<Vehicle> Vehicles(int driverId_Vehicles)
{
    ...?...
}

我已经整理了一个 SQL 查询,可以从数据库中获取数据:

SELECT VEHICLE.*
FROM Vehicle
INNER JOIN DriverHabit
ON VEHICLE.Id=DriverHabit.VehicleId
WHERE DriverHabit.Id = driverId

我需要帮助将此查询转换为 LINQ 方法语法以返回 IQueryable。

【问题讨论】:

    标签: linq-to-sql


    【解决方案1】:

    看起来关联 Vehicle - DriverHabit 是 1:n。你的Vehicle 类中应该有一个导航属性DriverHabits,所以你不必加入。只需访问导航属性。

    【讨论】:

    • DriverHabit 是 Driver 和 Vehicle 之间的连接表。 Driver 确实有许多 DriverHabit,但每个 DriverHabit 都有一个且只有一个 Vehicle。在 DriverHabit 表中,DriverId 是 Driver 中 Id 字段的外键,VehicleId 是 Vehicle 表中的外键。
    • 好的,那就去吧!使用导航属性,让 linq-to-sql 担心连接。
    • 哦!我遵循了有关使用 Entity Framework 的教程,但我没有意识到,但是我已经设置了导航属性,只是不知道如何使用它。感谢您的提示!
    【解决方案2】:

    选择车辆。* 从车辆 INNER JOIN DriverHabit ON VEHICLE.Id=DriverHabit.VehicleId WHERE DriverHabit.Id = driverId

    var vehicle = from v in _context.vehicle              
              join dh in _context.driverhabit on v.Id equals dh.VehicleId
              where dh.Id = driverId
              select { v, dh }
    
    return vehicle.ToList();
    

    【讨论】:

    • where后面没有“select”,应该把ToList()改成Queryable(),不过这​​个方向是对的。然而,这是 SQL 语法,而不是方法语法。
    猜你喜欢
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多