C# 按日期列表筛选列表

C# 按日期列表筛选列表,c#,linq,C#,Linq,我有一个包含DateTimeOffset属性的对象列表。 我想筛选该列表,以便只有其日期与另一个日期列表中的日期匹配的对象 例如,如果对象列表包含以下日期时间属性: {Test1, 12/1/2020}, {Test2, 12/2/2020}, {Test3, 12/3/2020} 还有另一份名单 12/1/2020 12/2/2020. 只有 应该返回您可以将Where()和Contains() 样本数据: var data = new [] { new { Name="

我有一个包含DateTimeOffset属性的对象列表。 我想筛选该列表,以便只有其日期与另一个日期列表中的日期匹配的对象

例如,如果对象列表包含以下日期时间属性:

{Test1, 12/1/2020},
{Test2, 12/2/2020},
{Test3, 12/3/2020}
还有另一份名单

12/1/2020
12/2/2020.
只有


应该返回您可以将
Where()
Contains()

样本数据:

var data = new [] {
    new { Name="Test1", Date = new DateTimeOffset(2020,12,1,0,0,0,TimeSpan.Zero) },
    new { Name="Test2", Date = new DateTimeOffset(2020,12,2,0,0,0,TimeSpan.Zero) },
    new { Name="Test3", Date = new DateTimeOffset(2020,12,3,0,0,0,TimeSpan.Zero) },
};

var filter = new[] {
    new DateTimeOffset(2020,12,1,0,0,0,TimeSpan.Zero),
    new DateTimeOffset(2020,12,2,0,0,0,TimeSpan.Zero),
};
筛选:

var filteredData = data.Where(p => filter.Contains(p.Date)).ToArray();

您可以组合
Where()
Contains()

样本数据:

var data = new [] {
    new { Name="Test1", Date = new DateTimeOffset(2020,12,1,0,0,0,TimeSpan.Zero) },
    new { Name="Test2", Date = new DateTimeOffset(2020,12,2,0,0,0,TimeSpan.Zero) },
    new { Name="Test3", Date = new DateTimeOffset(2020,12,3,0,0,0,TimeSpan.Zero) },
};

var filter = new[] {
    new DateTimeOffset(2020,12,1,0,0,0,TimeSpan.Zero),
    new DateTimeOffset(2020,12,2,0,0,0,TimeSpan.Zero),
};
筛选:

var filteredData = data.Where(p => filter.Contains(p.Date)).ToArray();
试试这个

List<DateTime> dateList = new List<DateTime>();
List<DateObject> objectList = new List<DateObject>();

var filteredList = objectList.Where(a => dateList.Contains(a.Date));
List dateList=newlist();
List objectList=新列表();
var filteredList=objectList.Where(a=>dateList.Contains(a.Date));
选中此项:

试试这个

List<DateTime> dateList = new List<DateTime>();
List<DateObject> objectList = new List<DateObject>();

var filteredList = objectList.Where(a => dateList.Contains(a.Date));
List dateList=newlist();
List objectList=新列表();
var filteredList=objectList.Where(a=>dateList.Contains(a.Date));
选中此项:


根据标签,显然你已经知道你可以用LINQ来实现这一点。到目前为止你尝试了什么?显然你已经知道,根据标签,你可以用LINQ做到这一点。到目前为止,您尝试了什么?当
数据
和/或
过滤器
的条目数增加时,可能需要将
过滤器
转换为
哈希集
,其中
包含的
应该是O(1),而不是O(n),因为数组和列表都是这样。但是,构建和填充一个集合的成本更高,因此您可能需要进行一些基准测试,以确定适合您的案例的最佳点。当
数据
和/或
过滤器
的条目数变得更高时,将
过滤器
转换为
哈希集
,其中
包含的
应该是O(1)而不是像数组和列表那样的O(n)。但是,构建和填充一个集合的成本更高,因此您可能需要进行一些基准测试,以找出适合您的案例的最佳点。