0

我有一个 DataTable,其中包含如下示例数据:

ID | HITS | Date
1  |  12  | 1 October 2017
2  |  15  | 1 October 2017
3  |  13  | 1 October 2017
4  |   5  | 1 November 2017
5  |   7  | 1 November 2017
6  |   3  | 1 November 2017

我想要的结果是:

ID   
2   ==> 15 is the max value for hits in Oct 2017 
5   ==> 7 is the max value for hits in Nov 2017

更喜欢在 VB.NET 中。我们可以在 TSQL 中执行此操作,但是因为数据已经在 DataTable 中,所以我们必须在 Linq 级别进行操作。

有任何想法吗?

4

2 回答 2

2

为了运行这个查询,你需要做四件事:

  • 按日期分组
  • 按命中数降序排列每个组
  • 选择每组的第一个元素
  • 拿它的身份证

C# 中的示例如下所示:

var res = dataTable.AsEnumerable()
    .Select(r => new {
        Id = r.Field<int>("Id")
    ,   Hits = r.Field<int>("Hits")
    ,   Date = r.Field<DateTime>("Date") // Use proper type here
    })
    .GroupBy(r => r.Date)
    .Select(g => new {
        Id = g.OrderByDescending(r => r.Hits).First().Id
    ,   Date = g.Key
    )
    .ToList();
于 2017-10-07T01:24:13.357 回答
0

我看到你已经用 UiPath 标记了这个。它不支持匿名类型,因此 LINQ 很麻烦,但是,您可以使用Datatable.Select(string)方法来使用类似 SQL 的语法并查询 DataTable。DataTable.Select 的语法与DataColumn.Expression相同。

我还想向您指出Teleriks .Net 代码转换器,因为 stackoverflow 充满了漂亮的 .NET,但它从不在 VB 中。

于 2017-11-01T11:03:22.240 回答