gpt4 book ai didi

C# Linq 查询查找无效条目

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

我正在尝试对列表中的数据进行一些手动验证。

我有一个 MachineryRecord 类,我对其进行排序然后按 JobNumber 分组,现在我需要在每个具有重叠时间的分组列表中找到任何结果,例如。开始时间到结束时间与另一个记录开始时间到结束时间重叠。

到目前为止,这是我得到的:

int invalidCount = 0;
var sorted = _machineRecords.OrderBy(x => x.StartTime).ToList();
var grouped = sorted.GroupBy(x => x.JobNumber).ToList();
foreach(IGrouping<int,MachineryRecord> mac in grouped)
{
var queryResults = mac.//Linq query to find overlapping times
invalidCount += queryResults.Count;
}
if(invalidCount > 0)
return false;
else
return true;

这里是 MachineRecord 对象的简化版本:

public class MachineryRecord
{
public int ID { get; set; }
public float StartTime { get; set; }
public float EndTime { get; set; }
}

所以我的问题是实现此目的的 linq 查询是什么?

感谢您的帮助。

最佳答案

两个区间 ab如果 a.StartTime < b.EndTime 重叠和 a.EndTime > b.StartTime假设开始时间总是在结束时间之前。因此,这可以表示如下。

var invalidCount = _machineRecords.Count(a =>
_machineRecords.Any(b =>
(a.ID != b.ID) &&
(a.JobNumber == b.JobNumber) &&
(a.StartTime < b.EndTime) &&
(a.EndTime > b.StartTime)));

包括最后的检查invalidCount这可以简化为单个返回语句。

return !_machineRecords.Any(a =>
_machineRecords.Any(b =>
(a.ID != b.ID) &&
(a.JobNumber == b.JobNumber) &&
(a.StartTime < b.EndTime) &&
(a.EndTime > b.StartTime)));

关于C# Linq 查询查找无效条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13852037/

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