【问题标题】:LINQ: Select DateTime with unique value of minutesLINQ:选择具有唯一值的 DateTime 分钟
【发布时间】:2017-09-07 11:43:27
【问题描述】:

我有一个 DateTime 对象列表。

我想使用 LINQ 将具有唯一分钟值的对象选择到单独的列表中。

我认为第一步是使用 GroupBy() 按分钟对项目进行分组。之后使用 Distinct() 选择原始值。我使用 VB.NET。但我不知道编写此查询的 VB.NET 语法,而且我找到的所有示例都是用 C# 编写的。

有人可以帮我吗?谢谢!

【问题讨论】:

  • 您可以尝试使用sharplab.io/…并插入您想要的C#代码,然后将输出设置为visual basic。
  • 这看起来像是 ToLookup 的工作。
  • @DavidB 我检查了它,这是个好主意。其作品。但比丹尼尔关于使用 LINQ 的回答要慢。

标签: .net vb.net linq datetime


【解决方案1】:

您可以执行以下操作...

Dim list As New List(Of DateTime)

list.Add(Now)
list.Add(New DateTime(2001, 1, 1, 5, 6, 3))
list.Add(New DateTime(2001, 1, 1, 5, 6, 3))
list.Add(New DateTime(2001, 1, 1, 5, 6, 7))
list.Add(New DateTime(2001, 1, 1, 5, 6, 7))

Dim q = list.GroupBy(Function(d) d.Second).SelectMany(Function(g) g.Take(1)).ToList()
'Outputs a list of 3 dates
'Current Date
'1/1/2001 05:06:03
'1/1/2001 05:06:03

【讨论】:

  • 只是一件小事 - 使用.SelectMany(Function(g) g.Take(1)) 可能比使用.Select(Function(g) g.First()) 更好。很容易造成.First() 可以中断的情况。
  • 谢谢,丹尼尔,这正是我想要的!我只是在匿名方法中设置严格的类型。
  • 感谢@Enigmativity 的提示。我已经修改了答案。
  • 还需要补充一点,如果当前Date/Time有3秒或7秒,列表中只会出现两项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2011-12-17
  • 2021-07-04
  • 1970-01-01
  • 2013-03-04
  • 2020-08-06
  • 2012-12-06
相关资源
最近更新 更多