我目前使用此查询获取重复行:
List<SetInstance> RelatedSets = (from proc in dc.Processes
join sip in dc.SetInstanceProcessBindingInPIs
on proc.ID equals sip.ProcessID
join si in dc.SetInstances
on sip.SetInstanceID equals si.ID
where proc.StationID == StationID
select new SetInstanceProcess {
SI = si,
Process = proc
}
).Distinct()
.OrderByDescending(x => x.Process.FinishDate)
.Take(5).Select(x => x.SI)
.ToList()
.ConvertAll<SetInstance>(i => (SetInstance)i)
.ToList();
我只想从上一个Process.FinishDate
和si.ProcessID
中选择一行。有人能指出我正确的方向吗?
编辑:我尝试实施IEqualityComparer
并覆盖equals方法并在Max
参数上使用Date
函数(两者都不起作用)
答案 0 :(得分:1)
问题是您在查询的{SI, Process}
结果上预先形成了distinct。如果只想区分SI
,请尝试修改查询以在选择后调用Distinct。我觉得这样的事情会奏效:
List<SetInstance> RelatedSets = (from proc in dc.Processes
join sip in dc.SetInstanceProcessBindingInPIs
on proc.ID equals sip.ProcessID
join si in dc.SetInstances
on sip.SetInstanceID equals si.ID
where proc.StationID == StationID
select new SetInstanceProcess {
SI = si,
Process = proc
}
).OrderByDescending(x => x.Process.FinishDate)
.Select(x => x.SI)
.Distinct()
.Take(5)
.ToList()
.ConvertAll<SetInstance>(i => (SetInstance)i)
.ToList();