按属性和时间间隔对数据进行分组

马兹威

我有一个看起来像这样的课程:

public class UserAction
{
        public int LogId { get; set; }
        public string UserName { get; set; }
        public CrudAction Action { get; set; }
        public DateTime Date{ get; set; }
}

此类的目的是存储有关谁对我的 Web 应用程序中的表单进行更改的信息。在表单上,​​您可以打开一个模式,显示这些更改及其发生的时间。

现在,问题是表单具有自动保存功能,可以在每次更改后保存表单,这会在短时间内生成大量日志帖子,因此看起来有点混乱。当我打开模态查看日志时,它通常看起来像这样:

User        User action  Date and time of action
Lisa        Edited       2018-05-20 09:46 AM GMT+2
Tom         Edited       2018-05-18 11:18 AM GMT+2
Tom         Edited       2018-05-18 11:18 AM GMT+2
Tom         Edited       2018-05-18 11:18 AM GMT+2
Tom         Edited       2018-05-18 11:16 AM GMT+2
Tom         Edited       2018-05-18 11:15 AM GMT+2
Tom         Edited       2018-05-18 11:15 AM GMT+2
Tom         Edited       2018-05-18 11:15 AM GMT+2
Tom         Edited       2018-05-18 10:12 AM GMT+2 
Lisa        Edited       2018-05-16 13.28 PM GMT+2
Lisa        Posted       2018-05-16 13.25 PM GMT+2

我正在寻找一种巧妙的方法,以某种方式将同一个人在同一小时内以相同的操作生成的所有帖子分组,并且只显示最新的帖子。像这样的东西:

User        User action  Date and time of action
Lisa        Edited       2018-05-20 09:46 AM GMT+2
Tom         Edited       2018-05-18 11:18 AM GMT+2
Tom         Edited       2018-05-18 10:12 AM GMT+2 
Lisa        Edited       2018-05-16 13.28 PM GMT+2
Lisa        Posted       2018-05-16 13.25 PM GMT+2

我的应用程序是一个 angular 5 应用程序,我使用 .Net Core Web API 从 SQL 数据库获取数据。我想这的逻辑可能在 angular 应用程序或 web api 中,但也许在客户端上执行此操作更可取?

我已经尝试在 javascript 和 LINQ 中进行这项工作,但我并没有走得很远(有些东西没有在我的大脑中点击)所以任何帮助将不胜感激。

乔治·帕沙伊德

如果您永远不想显示被分组过滤掉的数据,最好过滤服务器端已经存在的数据。原因是,否则你会将不必要的数据传输到客户端,无论如何都要删除它们。这会减慢您的应用程序的速度。只传输您需要的数据。

在 Web API 控制器中,您可以使用 LINQ 的强大功能。诀窍是引入IEqualityComparer<UserAction>实现您的要求的自定义,然后将其提供给Distinct方法。

UserAction[] userActions = dbContext.UserActions.ToArray();
var distinctActions = userActions
    .OrderByDescending(ua => ua.Date)             // sort as you like here
    .Distinct(new UserNameActionAndHourComparer());   // apply filter

public class UserNameActionAndHourComparer : IEqualityComparer<UserAction> {

    public bool Equals(UserAction left, UserAction right){
        if (left == null && right == null) {
             return true;
        }
        if (left == null | right == null) {
            return false;
        }

        // your equality criteria here ...
        if (left.UserName == right.UserName && left.Action == right.Action) {
            // implement requirement that same hour is considered equal
            return left.Date.Date == right.Date.Date && left.Date.Hour == right.Date.Hour;
        }
        return false;
   }

    // if two UserActions are considered equal, they should yield the same hashcode
    public int GetHashCode(UserAction ua) {
        return ua.UserName.GetHashCode() 
            ^ ua.Action.GetHashCode() 
            ^ new DateTime(ua.Date.Year, ua.Date.Month, ua.Date.Day, ua.Date.Hour, 0, 0).GetHashCode();
    }
}

C#小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

按不规则时间间隔对数据进行分组和求和(R语言)

来自分类Dev

按时间间隔和条件对数据进行分组

来自分类Dev

按5秒的时间间隔对数据分组

来自分类Dev

根据用户在运行时和时间间隔输入的字段对数据帧进行分组

来自分类Dev

SQLite:在特定时间间隔内对数据进行分组

来自分类Dev

使用python和pandas按季节对数据进行分组

来自分类Dev

PostgreSQL / TimescaleDB查询按自定义间隔对数据进行分组

来自分类Dev

按属性对数组对象进行分组

来自分类Dev

将日期间隔按其开始时间和结束时间进行分组

来自分类Dev

通过运行间隔对数据表进行分组

来自分类Dev

使用熊猫按给定的时间间隔对日期进行分组和处理

来自分类Dev

SQL和PHP按发布的年,日和月对数据进行分组

来自分类Dev

如何按日期间隔对数据进行分区?

来自分类Dev

您如何按任何时间间隔进行分组?

来自分类Dev

创建一个按日期和类别对数据进行分组的图形

来自分类Dev

如何使用 AngularJS 的 $filter 按年和月对数据进行分组

来自分类Dev

按行驶距离和车辆模式对数据框进行分组 - pandas

来自分类Dev

通过垃圾箱和熊猫时间对数据进行双重分组

来自分类Dev

在r中按日期和时间对数据框进行排序和排序

来自分类Dev

按小时间隔分组

来自分类Dev

dplyr不会按日期对数据进行分组

来自分类Dev

按Pig中的相同值对数据袋进行分组

来自分类Dev

对数据框内按多列分组的值进行排序

来自分类Dev

如何按季度对数据框中的行进行分组?

来自分类Dev

使用lapply按列对数据帧列表进行分组

来自分类Dev

在Python中按多个条件对数据进行分组

来自分类Dev

如何按r中的时差对数据进行分组?

来自分类Dev

如何按日期对数组数据进行分组

来自分类Dev

按共享值对数据列进行分组

Related 相关文章

  1. 1

    按不规则时间间隔对数据进行分组和求和(R语言)

  2. 2

    按时间间隔和条件对数据进行分组

  3. 3

    按5秒的时间间隔对数据分组

  4. 4

    根据用户在运行时和时间间隔输入的字段对数据帧进行分组

  5. 5

    SQLite:在特定时间间隔内对数据进行分组

  6. 6

    使用python和pandas按季节对数据进行分组

  7. 7

    PostgreSQL / TimescaleDB查询按自定义间隔对数据进行分组

  8. 8

    按属性对数组对象进行分组

  9. 9

    将日期间隔按其开始时间和结束时间进行分组

  10. 10

    通过运行间隔对数据表进行分组

  11. 11

    使用熊猫按给定的时间间隔对日期进行分组和处理

  12. 12

    SQL和PHP按发布的年,日和月对数据进行分组

  13. 13

    如何按日期间隔对数据进行分区?

  14. 14

    您如何按任何时间间隔进行分组?

  15. 15

    创建一个按日期和类别对数据进行分组的图形

  16. 16

    如何使用 AngularJS 的 $filter 按年和月对数据进行分组

  17. 17

    按行驶距离和车辆模式对数据框进行分组 - pandas

  18. 18

    通过垃圾箱和熊猫时间对数据进行双重分组

  19. 19

    在r中按日期和时间对数据框进行排序和排序

  20. 20

    按小时间隔分组

  21. 21

    dplyr不会按日期对数据进行分组

  22. 22

    按Pig中的相同值对数据袋进行分组

  23. 23

    对数据框内按多列分组的值进行排序

  24. 24

    如何按季度对数据框中的行进行分组?

  25. 25

    使用lapply按列对数据帧列表进行分组

  26. 26

    在Python中按多个条件对数据进行分组

  27. 27

    如何按r中的时差对数据进行分组?

  28. 28

    如何按日期对数组数据进行分组

  29. 29

    按共享值对数据列进行分组

热门标签

归档