【发布时间】:2021-08-04 01:31:24
【问题描述】:
我想从 4 个相互关联的表中获取数据。
场景:一个人可以借出属于某个程序的设备
Database Tables
person -> Persons Database Table
device loan -> Loan Database Table
device -> Devices Database Table
program -> Programs Database Table
这些是图表中的数据库表:
这是所需的输出:
上面的输出是由以下 SQL 查询产生的:
SELECT A.*,
COALESCE(ps.first_name,'') AS firstname,
COALESCE(ps.last_name,'') AS lastname,
COALESCE(p.program_name, '') AS program_Name
FROM devices A
LEFT JOIN device_loans l ON l.device_id = A.device_id
LEFT JOIN persons ps ON ps.person_id = l.person_id
LEFT JOIN programs p ON A.program_id = p.program_id
WHERE A.device_type ="Tablet" AND p.program_id = 5;
我想将 SQL 查询转换为 LINQ 方法语法。我试过了 以下方法:
var devices = from ds in _context.Devices
join p in _context.Programs on ds.ProgramID equals p.Id
join l in _context.DeviceLoan on ds.Id equals l.device_id
join ps in _context.Persons on l.device_id equals ps.Id
where ds.Type == typeName
where ds.ProgramID == id
select new Device
{
Id = ds.Id,
ProgramID = p.Id,
Type = ds.Type,
Serial_Number = ds.Serial_Number,
Label = ds.Label,
Price = ds.Price,
Purchase_Date = ds.Purchase_Date,
Device_Status = ds.Device_Status
};
我想要的是创建一个 LINQ 方法语法,其中包括 Database Persons Table、Database 中的 Firstname 和 Lastname Programs Table 和 Database Devices Table 中的数据,就像上面的 SQL 查询一样。
Output: I want all devices of a certain program, loan or not loan with
first name & last name of a Person loan too.
感谢您的帮助
【问题讨论】:
-
我认为你的问题是你没有做左连接,看看怎么做:stackoverflow.com/questions/3404975/left-outer-join-in-linq
-
这能回答你的问题吗? LEFT OUTER JOIN in LINQ
-
使用 linqpad 将 sql 转换为 linq,反之亦然。这只是一个刚刚安装的应用程序,您可以编写查询。 linqpad.net
-
@RahulShukla 我不认为 LINQPad 从 sql 到 Linq。它将执行 Linq to sql。
-
如果您发布课程,我会帮助您将其转换为 LINQ。
标签: c# mysql sql-server linq