使用Linq选择前5个唯一行

时间:2017-11-05 15:37:12

标签: c# .net linq

我目前使用此查询获取重复行:

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.FinishDatesi.ProcessID中选择一行。有人能指出我正确的方向吗?

编辑:我尝试实施IEqualityComparer并覆盖equals方法并在Max参数上使用Date函数(两者都不起作用)

1 个答案:

答案 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();
相关问题