繁体   English   中英

使用Linq选择前5个唯一行

[英]Choose first 5 unique rows using 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方法,并在Date参数上使用Max函数(它们均无效)

问题是您要在查询的{SI, Process}结果中执行不同的查询。 如果仅希望区分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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM