我有以下 LINQ 查询,它将用于查找任何“相似”的货物:
from c in cons
group c by new { c.TripDate.Value, c.DeliveryPostcode, c.DeliveryName } into cg
let min = cg.Min(a => a.DeliverFrom)
let max = cg.Max(a => a.DeliverFrom)
let span = max - min
where span.TotalMinutes <= 59
select cg;
主要的是最小值、最大值和跨度。基本上,“组”中任何发货日期时间与组中任何其他发货日期时间相差 59 分钟以内的发货都将在组中退回。
上面的代码最初对我来说看起来不错,但经过进一步检查,似乎组中是否有超过 2 条记录 - 2 条的 DeliverFrom 日期彼此相差 59 分钟,还有一条的 DeliverFrom 日期not在任何 59 分钟之内,那么查询将不会返回该组,因为它将选择最小值和最大值,并发现差异超过 59 分钟。我想要发生的是看到该组中有 2 个托运货物,其 DeliverFrom 日期足够接近,然后只需选择一个包含这两个托运货物的组。
我该怎么做呢?
编辑:哦,其中添加了另一个条款。有一个名为“Weight”的字段和一个名为“Spaces”的字段,每组最多可以有 26 个 Weight 和 26 个 Spaces
如果我没记错的话,你正在寻找的是一个称为簇识别 http://en.wikipedia.org/wiki/Cluster_analysis,如果是这样的话,这就是一个比您想象的要复杂得多的问题。
作为思维练习,想象一下如果您在 1:00、1:30 和 2:00 有 3 个条目。您想如何对这些进行分组?前两个或后两个可以作为一组工作(相隔不到 59 分钟),但所有 3 个都不能。
如果您只想将项目链接到一个组中,只要这些项目与组中任何其他项目的时间间隔在 59 分钟内,则需要继续迭代,直到停止查找新项目以添加到任何集群。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)