C# 如何使用linq查找特定的HashSet元素

C# 如何使用linq查找特定的HashSet元素,c#,linq,datetime,hashset,C#,Linq,Datetime,Hashset,我有一组字符串数组。一个数组字符串类似于“2015-9-14 21:22:13”日期时间。如何使用DateTime.ParseExact转换为DateTime,然后使用linq从两个DateTime之间的HashSet数组中查找所有时间。以前我使用list,但HashSet是search元素时有更好的性能,现在我更改代码使用HashSet 以下是我的旧代码和列表: foreach (var infos in this.InfoFromDatabase) {

我有一组字符串数组。一个数组字符串类似于“2015-9-14 21:22:13”日期时间。如何使用DateTime.ParseExact转换为DateTime,然后使用linq从两个DateTime之间的HashSet数组中查找所有时间。以前我使用list,但HashSet是search元素时有更好的性能,现在我更改代码使用HashSet

以下是我的旧代码和列表:

foreach (var infos in this.InfoFromDatabase)
        {
            thisTime = DateTime.ParseExact(infos[5], "yyyy-M-d H:m:s", null);

            // if is in this diapazon time add in list
            if (thisTime > minimumDateTime && thisTime < maximumDateTime)
            {
                allInformation.Add(infos);
            }
        }
foreach(此.InfoFromDatabase中的var infos)
{
thisttime=DateTime.ParseExact(infos[5],“yyyy-M-dh:M:s”,null);
//如果位于此diapazon time加载项列表中
如果(ThistTime>minimumDateTime&&ThistTime
A
HashSet
只有在需要检查该元素的精确性时才有意义(或者更好:使用由
GetHashCode()返回的相同值)。在您的例子中,您只需搜索所有数据,它仅在原始字符串块中可用。因此,哈希集不会给您带来任何性能改进

由于您将变量命名为
InfoFromDatabase
,并且您知道必须将数组中的元素5解析为日期时间,因此每个数组中似乎都有一个结构。因此,也许您应该为数组中的每个元素创建一个包含单独属性的类,该类将在构造函数中获得这样一个数组。在这里,您可以解析数组并填充属性。现在,您可以用对象填充列表,并轻松检查值是否符合您的条件


不幸的是,通过在内存中构建这样的结构,您无法改善性能(可能会延迟初始化给定数组中的属性值),但是我会跳过这样的优化,直到您测量到性能瓶颈为止。在这种情况下,请带着您的具体性能问题回来,这样肯定会帮助您解决问题。

如果您只是在寻找LINQ,那么它就在这里。它适用于任何
IEnumerable
(哈希集和列表):

//假设
//IEnumerable this.InfoFromDatabase
var allinfo=this.InfoFromDatabase.Where(i=>
{
var thisttime=DateTime.ParseExact(i[5],“yyyy-M-d H:M:s”,null);
返回ThistTime>minimumDateTime&&ThistTime

如果需要,可以对结果调用
ToList()
或任何其他
方法。

哈希集在这种情况下不会更快。可能会稍微慢一点。如果这是使用哈希集的唯一原因,请保留列表。
//Assuming that 
//IEnumerable<string[]> this.InfoFromDatabase

var allInformation = this.InfoFromDatabase.Where(i =>
{
    var thisTime = DateTime.ParseExact(i[5], "yyyy-M-d H:m:s", null);
    return thisTime > minimumDateTime && thisTime < maximumDateTime;
});