Visual Studio 2019; ASP.Net Core 2.1
У меня есть система БД, в которой есть таблица событий, происходящих на разных машинах.
// pseudo code
eventLog (
id int primary key not null,
eventType varchar(16) not null,
machineName varchar(64) not null,
loggedInUser varchar(16) not null,
eventDate datetime not null,
)
Я хочу получить самые ранние и самые последние даты событий для конкретной машины. В SSMS я могу получить информацию, которую хочу получить:
SELECT
MIN([eventDate]),
MAX([eventDate])
FROM eventLog
WHERE UPPER(machineName) LIKE 'MY-MACHINENAME%';
В пробном прогоне я получаю минимальное / максимальное значения:
2015-08-17 10:31:47.000 / 2019-05-02 12:54:20.000
Примечание: machineName
может быть либо «простой» строкой, например «mypc», либо полным доменным именем («mypc.company.com»). Я выделил первый «пунктирный» сегмент возможного полного доменного имени и сравнил его с переменной myMachine
, в которой уже были удалены все пунктирные части.
В C # я знаю, что есть Aggregate
методы, но мне трудно следовать документам и примерам, которые я нашел, и воплощать их в реальную практику. У меня так далеко:
public class VisibleRange {
public DateTime start { get; set; }
public DateTime end { get; set; }
}
...
var ctx = userTrackingContext.EventLog;
usertrackingRange = (
from eventLog in userTrackingContext.EventLog
where eventLog.Machine.ToUpper().Split(
'.',
StringSplitOptions.RemoveEmptyEntries
)[0].Trim().Equals(myMachine)
select eventLog.Date
).Select(range => new VisibleRange {
start = ctx.Min(a => a.Date),
end = ctx.Max(a => a.Date)
}).First();
Это работает, но не дает мне полезных результатов для значения Min. Это примерно на 11 лет.
8/2/2004 8:05:27 PM / 5/2/2019 12:00:00 AM
Как преобразовать запрос SSMS в запрос LINQ?