gpt4 book ai didi

c# - 在 LINQ 中查找相似的记录

转载 作者:行者123 更新时间:2023-11-30 15:40:51 24 4
gpt4 key购买 nike

我有以下 LINQ 查询,它将用于查找任何“相似”的 cargo :

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;

主要是最小值、最大值和跨度。基本上,“组”中的任何 cargo ,其 DeliverFrom 日期时间在组中任何其他 cargo 的 59 分钟内,都将在组中退回。

上面的代码最初对我来说看起来不错,但经过​​进一步检查,似乎如果组中有超过 2 条记录 - 2 条 DeliverFrom 日期彼此相差 59 分钟,而 1 条 DeliverFrom 日期不是 在任何 59 分钟内,则查询不会返回该组,因为它将选择最小值和最大值并看到差异超过 59 分钟。我想要发生的是看到组中有 2 批 cargo 的 DeliverFrom 日期足够接近,然后只选择一个包含这两批 cargo 的组。

我该怎么做呢?

编辑:Doh,其中添加了另一个子句。有一个叫做'Weight'的字段和一个叫做'Spaces'的字段,每个组最多可以有26个权重和26个空格

最佳答案

如果我没记错的话,你要找的是一个名为 cluster identification 的统计问题。 ,如果是这样的话,它是一个比你想象的要复杂得多的问题。

作为思维练习,假设您在 1:00、1:30 和 2:00 有 3 个条目。你想如何对这些进行分组?前两个或后两个可以作为一个小组工作(相隔不到 59 分钟),但所有 3 个都不会。

如果您只想继续将项目链接到一个组中,只要它们与组中任何其他项目的距离不超过 59 分钟,您就需要继续迭代,直到您停止寻找要添加到任何集群的新项目。

关于c# - 在 LINQ 中查找相似的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8852681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com