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”之类的“简单”字符串,也可以是FQDN(“ mypc.company.com”)。我将可能的FQDN的第一个“虚线”部分分割开,并将其与已经删除了任何虚线部分的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查询?
答案 0 :(得分:2)
您可以尝试:-
var range = new VisibleRange() { };
var matched = userTrackingContext.EventLog.Where(a => a.MachineName.StartsWith(myMachine));
if(matched != null)
{
range.start = matched.Min(a => a.EventDate);
range.end = matched.Max(a => a.EventDate);
}
答案 1 :(得分:0)
您可以尝试关注LINQ查询
dic_1
答案 2 :(得分:0)
我进行了一次快速的烟雾测试,您的选择对我有用。为什么不调用range.Min和range.Max从过滤后的数据集中获取结果?
import * as Highcharts from 'highcharts';
import exporting from 'highcharts/modules/exporting';
import offline from 'highcharts/modules/offline-exporting';
exporting(Highcharts);
offline(Highcharts);