Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在LINQ查询中有条件地联接?_Linq_Join_Conditional - Fatal编程技术网

如何在LINQ查询中有条件地联接?

如何在LINQ查询中有条件地联接?,linq,join,conditional,Linq,Join,Conditional,如果我有两张桌子;驱动程序由DriverId设置密钥,Trips使用外键DriverId和CoDriverId,我希望找到驱动程序是驱动程序或副驱动程序的所有Trips,我可以在Transact-SQL中将其编码为 select d.DriverId, t.TripId from Trips t inner join Drivers d on t.DriverId = d.DriverId or t.CoDriverId = d.DriverId 如何将其编码为LINQ查询?不能使用LIN

如果我有两张桌子;驱动程序由DriverId设置密钥,Trips使用外键DriverId和CoDriverId,我希望找到驱动程序是驱动程序或副驱动程序的所有Trips,我可以在Transact-SQL中将其编码为

select d.DriverId, t.TripId 
from Trips t inner join Drivers d 
on t.DriverId = d.DriverId or t.CoDriverId = d.DriverId

如何将其编码为LINQ查询?

不能使用LINQ连接,基本上-LINQ只直接支持Equijoin

但是,您可以执行以下操作:

var query = from trip in db.Trips
            from driver in db.Drivers
            where trip.DriverId == driver.DriverId ||
                  trip.CoDriverId == driver.DriverId
            select new { driver.DriverId, trip.TripId };

在转换后的SQL中很可能会使用相同的联接。

基本上与我们开始使用联接关键字之前的旧SQL语法相同。