gpt4 book ai didi

c# - 比较两个连续的行 - 分组依据

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

我有一个模型如下

ID     Date                    BoitierNumber
1 07/04/2012 14:01:46 1
2 07/04/2012 14:01:50 2
3 07/04/2012 14:01:50 3
4 07/04/2012 14:01:56 1
5 07/04/2012 14:02:06 1
6 07/04/2012 14:02:10 2

我按 (BoitierNumber) 对行进行了分组

*boitier Number 1

1 07/04/2012 14:01:46
4 07/04/2012 14:01:56
5 07/04/2012 14:02:06

*boitier Number 2

2 07/04/2012 14:01:50
6 07/04/2012 14:02:10

*boitier Number 3

3 07/04/2012 14:01:50

为此我使用了这段代码

var groups = context.Essais.GroupBy(p => p.BoitierNumber)
.Select(g => new { GroupName = g.Key, Members = g });

foreach (var g in groups)
{
Console.WriteLine("Members of {0}", g.GroupName);

foreach (var member in g.Members.OrderBy(x=>x.Id))
{
Console.WriteLine("{0} {1}", member.Id,member.Date);
}
}

目前一切正常现在我想比较两个连续分组行的日期如果 row[i].date>row[i-1].date i 将删除 row[i-1]

例如:

*boitier Number 1

1 07/04/2012 14:01:46
4 07/04/2012 14:01:56
5 07/04/2012 14:02:06
8 07/04/2012 14:01:00
10 07/04/2012 14:00:00
13 07/04/2012 14:03:00
boitier Number 1
---> Date of row of Id 4 > Date of row of ID 1
then i will delete row of ID 1
---> Date of row of Id 5 > Date of row of ID 4
then i will delete row of ID 4
---> Date of row of Id 8 < Date of row of ID 5
then i will skip it
---> Date of row of Id 10 < Date of row of ID 8
then i will skip it
---> Date of row of Id 13 > Date of row of ID 10
then i will delete row of ID 10
...

TherFore, After this process, only rows 13 and 8 will be remain

最佳答案

你现在能做的最快的改变是:

var groups = context.Essais.GroupBy(p => p.BoitierNumber)
.Select(g => new
{
GroupName = g.Key,
Members = g.OrderBy(m=>m.Id)
});

编辑EF 似乎无法在投影中调用 ToList()。

成员现在将是一个按 id 排序的列表,然后您可以使用 for 而不是 foreach

foreach (var g in groups)
{
var members = g.Members.ToList();
for (int i = 1, i < members.Count; i++)
{
var previousMember = members[i-1];
var currentMember = members[i];
if (..)
// code to delete
}
}

只是一个注释。使用初始查询投影分组成员,它将创建其他查询以选择与每个组键对应的成员。您仍将加载整个表,但在后续查询中。您可以在内存中进行分组:

var groups = context.Essais
.AsEnumberable().
.GroupBy(p => p.BoitierNumber)
.Select(g => new { GroupName = g.Key, Members = g.OrderBy(m=>m.Id).ToList() });

关于c# - 比较两个连续的行 - 分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10086266/

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