C# 根据linq中的事件类型执行groupby
我有一个应用程序,将跟踪与屏幕截图的所有用户活动。所以我在报告时面临一个问题,我想知道用户在特定字段的按键事件上花费了多少时间。 下面是示例数据C# 根据linq中的事件类型执行groupby,c#,.net,linq,c#-4.0,C#,.net,Linq,C# 4.0,我有一个应用程序,将跟踪与屏幕截图的所有用户活动。所以我在报告时面临一个问题,我想知道用户在特定字段的按键事件上花费了多少时间。 下面是示例数据 public class UserActivityData { [DisplayName("Process Name")] public string ProcessName { get; set; } [DisplayName("Window Title")] public s
public class UserActivityData
{
[DisplayName("Process Name")]
public string ProcessName { get; set; }
[DisplayName("Window Title")]
public string WindowTitle { get; set; }
[DisplayName("Event Type")]
public EventType EventType { get; set; }
[DisplayName("Event Time")]
public string EventTime { get; set; }
[DisplayName("Total Time Spent In Secs")]
public string TotalTimeSpent { get; set; }
public int X { get; set; }
public int Y { get; set; }
[DisplayName("Capture Data")]
public string CaptureData { get; set; }
public string ApplicationPath { get; set; }
[DisplayName("Element Name")]
public string ElementName { get; set; }
[DisplayName("Automation ID")]
public string AutomationID { get; set; }
[DisplayName("Control Type")]
public string ControlType { get; set; }
public long LongEventTime { get; set; }
}
public enum EventType
{
RightClick,
LeftClick,
MiddleButton,
MouseMove,
DoubleClick,
KeyPress,
Copy,
Paste,
Focus,
Open,
Close,
FiddlerRequest
}
这是保存数据集的类
[{"ProcessName":"explorer","WindowTitle":"explorer","EventType":1,"EventTime":"28-Jul-2017 06:39:24","X":255,"Y":354,"CaptureData":"","ApplicationPath":"C:\\Windows\\Explorer.EXE","ElementName":"","AutomationID":"","ControlType":"list item","LongEventTime":636368639643087155},
{"ProcessName":"explorer","WindowTitle":"explorer","EventType":1,"EventTime":"28-Jul-2017 06:39:25","X":253,"Y":268,"CaptureData":"","ApplicationPath":"C:\\Windows\\Explorer.EXE","ElementName":"","AutomationID":"","ControlType":"list item","LongEventTime":636368639650818276},
{"ProcessName":"explorer","WindowTitle":"explorer","EventType":1,"EventTime":"28-Jul-2017 06:39:25","X":266,"Y":176,"CaptureData":"","ApplicationPath":"C:\\Windows\\Explorer.EXE","ElementName":"","AutomationID":"","ControlType":"list item","LongEventTime":636368639659717952},
{"ProcessName":"explorer","WindowTitle":"explorer","EventType":1,"EventTime":"28-Jul-2017 06:39:27","X":212,"Y":342,"CaptureData":"","ApplicationPath":"C:\\Windows\\Explorer.EXE","ElementName":"","AutomationID":"","ControlType":"list item","LongEventTime":636368639670828333},
{"ProcessName":"explorer","WindowTitle":"explorer","EventType":1,"EventTime":"28-Jul-2017 06:39:28","X":129,"Y":542,"CaptureData":"","ApplicationPath":"C:\\Windows\\Explorer.EXE","ElementName":"","AutomationID":"","ControlType":"list item","LongEventTime":636368639680374536},
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:30","X":589,"Y":301,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639705742531},
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:31","X":589,"Y":301,"CaptureData":"r","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639714952510},
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:31","X":589,"Y":301,"CaptureData":"a","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"r","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639716392533},
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:31","X":589,"Y":301,"CaptureData":"v","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ra","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639718522707},
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:32","X":589,"Y":301,"CaptureData":"i","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"rav","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639720202589},
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:32","X":589,"Y":301,"CaptureData":"k","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ravi","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639722662623},
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:32","X":589,"Y":301,"CaptureData":"a","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ravik","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639724112642},
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:32","X":589,"Y":301,"CaptureData":"n","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ravika","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639725722813},
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:32","X":589,"Y":301,"CaptureData":"t","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ravikan","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639727382686},
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:32","X":589,"Y":301,"CaptureData":"h","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ravikant","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639728952705},
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":5,"EventTime":"28-Jul-2017 06:39:34","X":589,"Y":301,"CaptureData":"\u0001","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"ravikanth","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639741393315},
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":6,"EventTime":"28-Jul-2017 06:39:35","X":589,"Y":301,"CaptureData":"ravikanth","ApplicationPath":"","ElementName":"ravikanth","AutomationID":"1051654","ControlType":"edit","LongEventTime":636368639751728266},
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:37","X":669,"Y":346,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"","AutomationID":"7930456","ControlType":"edit","LongEventTime":636368639771735142},
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":7,"EventTime":"28-Jul-2017 06:39:38","X":666,"Y":349,"CaptureData":"ravikanth","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"","AutomationID":"7930456","ControlType":"edit","LongEventTime":636368639780934311},
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:39","X":762,"Y":356,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"","AutomationID":"20186264","ControlType":"edit","LongEventTime":636368639792061233},
{"ProcessName":"WinSCP","WindowTitle":"Login","EventType":7,"EventTime":"28-Jul-2017 06:39:40","X":762,"Y":356,"CaptureData":"ravikanth","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"","AutomationID":"20186264","ControlType":"edit","LongEventTime":636368639805472017},
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:47","X":673,"Y":239,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"Session","AutomationID":"4262798","ControlType":"pane","LongEventTime":636368639876601809},
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:48","X":671,"Y":255,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"Drop Down Button","AutomationID":"DropDown","ControlType":"button","LongEventTime":636368639880488395},
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:49","X":643,"Y":303,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"WebDAV","AutomationID":"","ControlType":"list item","LongEventTime":636368639891350690},
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:50","X":806,"Y":259,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"No encryption","AutomationID":"5374814","ControlType":"combo box","LongEventTime":636368639903461809},
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:51","X":791,"Y":277,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"TLS/SSL Implicit encryption","AutomationID":"","ControlType":"list item","LongEventTime":636368639912755112},
{"ProcessName":"WinSCP","WindowTitle":"WinSCP","EventType":1,"EventTime":"28-Jul-2017 06:39:52","X":757,"Y":558,"CaptureData":"","ApplicationPath":"C:\\Program Files (x86)\\WinSCP\\WinSCP.exe","ElementName":"Close","AutomationID":"1509814","ControlType":"button","LongEventTime":636368639929011583}]
我需要一个帮助来编写一个linq查询,以便根据EventType Keypress事件执行groupby,并获取花费的总时间
我对你的课程做了两个小改动:
DateTime
。这样,我就不必尝试将字符串解析为查询中的日期var data = new JavaScriptSerializer().Deserialize<List<UserActivityData>>(File.ReadAllText(@"C:\users\foo\desktop\demo.json")); //saved your data locally
data.Where(x => x.EventType == "5") // 5 is KeyPress
.GroupBy(d => d.ProcessName) //Grouping by ProcessName
.Select (d => new {
ProcessName = d.FirstOrDefault().ProcessName,
//get Max; substract min; get rough duration in seconds
Duration = d.Max (x => x.EventTime) - d.Min (x => x.EventTime),
//sum up all ticks to get duration in ticks
DurationTicks = d.Sum (x => x.LongEventTime)
})
//LinqPad native; do not use in Visual Studio or VS Code
.Dump();
var data=new JavaScriptSerializer()。反序列化(File.ReadAllText(@“C:\users\foo\desktop\demo.json”)//在本地保存数据
其中(x=>x.EventType==“5”)//5是按键
.GroupBy(d=>d.ProcessName)//按ProcessName分组
.选择(d=>new{
ProcessName=d.FirstOrDefault().ProcessName,
//获取最大值;减去最小值;以秒为单位获取大致的持续时间
持续时间=d.Max(x=>x.EventTime)-d.Min(x=>x.EventTime),
//将所有刻度相加,以获得以刻度为单位的持续时间
DurationTicks=d.Sum(x=>x.LongEventTime)
})
//林帕德本地人;不要在Visual Studio或VS代码中使用
.Dump();
输出:
Hey@ravi你能提供保存数据集的类吗?是
LongEventTime
以毫秒为单位的时间还是滴答声?LongEventTime是滴答声..在哪个命名空间上可以找到EventType
类?EventType是我的内部枚举,可能是左键单击、右键单击、按键、复制粘贴等。不,除非你告诉我,什么不起作用。我看不见你的脑袋或电脑屏幕。