查找重复项,然后选择日期最接近currentDate的项
本文关键字:日期 最接近 currentDate 的项 选择 然后 查找 | 更新日期: 2023-09-27 18:18:44
注意:使用Windows Mobile 6.5 Compact Framework
我有一个下列对象的集合:
public class RFileModel
{
public List<string> RequiredFilesForR = new List<string>();
public string Date { get; set; }
public string RouteId { get; set; }
}
var ListOfRFileModels = new List<RFileModel>();
相同的RouteId
有可能出现在RFileModel
的多个实例中,但Date
不同。
我正在尝试识别重复项并只选择一个,最接近当前日期的一个。
到目前为止,我有以下LINQ:var query = ListOfRFileModels.GroupBy(route => route.RouteId)
.OrderBy(newGroup => newGroup.Key)
.Select(newGroup => newGroup).ToList();
但是我不认为这是我需要的,因为它仍然返回所有元素。我期待一个非唯一RouteId
的列表,这样我就可以迭代每个非唯一id并比较日期以查看要保留哪个。
如何使用LINQ或简单的foreach
来完成此操作?
您的表达式排序的是组,而不是组元素。下面是修复方法:
DateTime currentDate = ...
var query = ListOfRFileModels
.GroupBy(route => route.RouteId)
.Select(g => g.OrderBy(fm => currentDate-fm.Date).First())
.ToList();
currentDate-fm.Date
表达式产生当前日期与RFileModel
对象的日期之差。差异最小的对象最终将位于有序序列的第一个位置。呼叫First()
从组中拾取它以产生最终结果。
假设您只想要重复的成员,取@dasblinkenlight的答案并添加Where子句:.Where(grp => grp.Count()>1)
:
DateTime currentDate = DateTime.Now;
var query = ListOfRFileModels
.GroupBy(route => route.RouteId)
.Where(grp => grp.Count()>1)
.Select(g => g.OrderBy(fm => currentDate-fm.Date).First())
.ToList();