LINQ查询无法正常工作
我想做如下操作,我想在某些条件下访问访问者表中的访客记录
我想获得访问该地点的最后5位不同访客的列表
我正在使用以下查询来获取结果,但是当涉及distinct()时会导致问题,distinct()会破坏现有的顺序。
var result = ObjPlace.visitorlist
.where(visitpalce => visitplace.name == Placename)
.OrderByDescending(visitor => visitor.visitdate)
.Select(x => x.visitorID)
.Distinct()
.take(5);
当我删除distinct()时,它完美地工作......
我怎样才能达到同样目的?
答案 0 :(得分:2)
var query = from v in ObjPlace.visitorlist
where v.name == Placename
group v by v.visitorID into g
let lastVisit = g.Max(x => x.visitdate)
orderby lastVisit descending
select g.First(v => v.visitdate == lastVisit);
这将返回上次访问时提供的不同实体列表。然后只需要前五名:
query.Take(5)
您需要在此进行分组,因为一个访问者可能会在前5个记录中进行多次访问。因此,首先您要按地名过滤列表。然后将访问者的所有访问分组。即你有一组访问。在每个组中,您定义访问者的上次访问时间,然后只选择第一个访问组中的实体,其时间等于该访问者的上次访问日期。
答案 1 :(得分:0)
您可以尝试更改顺序:
var result = ObjPlace.visitorlist
.Where(visitpalce => visitplace.name == Placename)
.Distinct()
.OrderByDescending(visitor => visitor.visitdate)
.Select(x => x.visitorID)
.Take(5);
答案 2 :(得分:0)
您想要获得的独特数据是什么?
如果你的对象实现IEquatable,那么将比较所有字段 - 即如果两个对象中的日期不同则它们将是不同的,但是如果任何其他字段不同,则对象将被视为不同。
您可以发布输入数据的样本,获得的输出和预期的输出吗?