查找重复项目,然后选择日期最接近 currentDate 的项目
Finding duplicate items then selecting one with closest date to currentDate
注意: 使用 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
。
我正在尝试识别重复项并且 select 只有一个,最接近当前日期的那个。
到目前为止,我有以下 LINQ:
var query = ListOfRFileModels.GroupBy(route => route.RouteId)
.OrderBy(newGroup => newGroup.Key)
.Select(newGroup => newGroup).ToList();
但我认为这不是我需要的,因为它仍然 returns 所有元素。我期待一个非唯一列表 RouteId
,这样我就可以迭代每个非唯一 ID 并比较日期以查看保留哪个。
如何使用 LINQ 或简单的 ole 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();
注意: 使用 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
。
我正在尝试识别重复项并且 select 只有一个,最接近当前日期的那个。
到目前为止,我有以下 LINQ:
var query = ListOfRFileModels.GroupBy(route => route.RouteId)
.OrderBy(newGroup => newGroup.Key)
.Select(newGroup => newGroup).ToList();
但我认为这不是我需要的,因为它仍然 returns 所有元素。我期待一个非唯一列表 RouteId
,这样我就可以迭代每个非唯一 ID 并比较日期以查看保留哪个。
如何使用 LINQ 或简单的 ole 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();