Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较两个连续的行-按分组_C#_.net_Linq_Entity Framework - Fatal编程技术网

C# 比较两个连续的行-按分组

C# 比较两个连续的行-按分组,c#,.net,linq,entity-framework,C#,.net,Linq,Entity Framework,我有一个模型如下 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

我有一个模型如下

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)对行进行分组

为此,我使用了以下代码

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);
    }
}
目前一切正常 现在我想比较两个成功分组行的日期 如果第[i].date行>第[i-1].date行,我将删除第[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 
*锅炉编号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 
一号锅炉
--->Id为4的行的日期>Id为1的行的日期
然后我将删除ID为1的行
--->Id为5的行的日期>Id为4的行的日期
然后我将删除ID为4的行
--->Id 8行的日期Id 10行的日期Id为13的行的日期>Id为10的行的日期
然后我将删除ID为10的行
...
因此,在此过程之后,只保留第13行和第8行

您现在可以做的最快更改是:

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
    }
}

当你说delete时,你的意思是从数据库中删除吗?是的,我想从数据库中删除行。为什么不使用for而不是foreach并检查上一项(i-1)?@AdrianIftode这就是我想要的,但是当我使用for循环
for(var i=0;ix.Id).count();i++)时,我不知道如何访问成员[i].id成员[i].date…@ElloumiAhmed在订购物品后添加一个
.ToList()
调用
var members=g.members.OrderBy(x=>x.Id.ToList()
然后您可以调用
成员[i]
成员[i-1]
。在
for
中,您的意思是使用变量
组吗?还有,为什么要从1开始循环而不是从零开始?@SteveMallory,这个for将在第一个迭代器中使用。我从1开始,所以会有一个以前的。我将编辑我的答案,可能不清楚。@AdrianIftode我得到这个错误
LINQ to Entities不识别方法'«System.Collections.Generic.List'1[Model.Essai]ToList[Essai](System.Collections.Generic.IEnumerable'1[Model.Essai])
在foreach行中(组中的var g)@ElloumiAhmed,我不知道为什么(你添加了using System.Linq吗?@ElloumiAhmed,我编辑了它,查看我的新更改,告诉我它是否有效
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()  });