Из-за жизни я не могу выбраться из этого.
У меня есть 2 таблицы в базе данных 1. Компьютеры 2. UserLogins
По сути, я пытаюсь получить последнюю запись для входа в систему из таблицы "UserLogins" и объединить ее с соответствующей запись в таблице «Компьютеры».
Это звучит достаточно просто, но я еще не изучил достаточное количество курсов LINQ / EF Core, чтобы понять, как это сделать правильно, кажется.
Вот некоторые SQL, которые я знаю, функции, как я ожидаю:
SELECT * FROM ComputerInfo
LEFT JOIN (
SELECT LoginID, UserID, l.ComputerName, IpAddress, l.LoginTime FROM UserLogins as l
INNER JOIN (
SELECT ComputerName, MAX(LoginTime) as LoginTime
FROM UserLogins
GROUP BY ComputerName) as max on max.ComputerName = l.ComputerName and max.LoginTime = l.LoginTime
) as toplogin on toplogin.ComputerName = ComputerInfo.ComputerName
Для справки, я собираюсь реализовать это в своем классе Controller.cs, и я использую: EF Core ( 3.1.2) ASP. NET Core (3.1)
У меня есть пара запросов, с которыми я экспериментировал, которые возвращают результаты, но я не могу присоединиться к ним без ошибок:
var computerQuery = _context.ComputerInfo
.OrderBy(on => on.ComputerName)
var userQuery = _context.UserLogins
.Select(p => p.ComputerName)
.Distinct()
.Select(id => _context.UserLogins
.OrderByDescending(p => p.LoginTime)
.FirstOrDefault(p => p.ComputerName == id))
.ToListAsync();