Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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 - Fatal编程技术网

C# 从另一个分组列表创建列表。(按日期计算的费率)

C# 从另一个分组列表创建列表。(按日期计算的费率),c#,.net,C#,.net,我得到了一个集合的列表,它有许多属性。具体来说,其中3个是:ID1、ID2(两个ID都是我的表中的键,在这种情况下ID1将始终相同)、数量和日期 一些事实: 我将通过选择所有ID1号码获得一个列表 我需要用ID1和ID2检查我有多少ID2重复记录(可能返回2条以上的记录) 如果我有多条记录具有相同的ID1和ID2,我将需要从这些重复记录中检查其中一条(如果有)具有相同的数量。在这个记录中,我需要得到重复次数最多的最新(使用日期变量)记录 让我尝试一下: 样本1: 记录1:ID1=1,ID2

我得到了一个集合的列表,它有许多属性。具体来说,其中3个是:ID1、ID2(两个ID都是我的表中的键,在这种情况下ID1将始终相同)、数量和日期

一些事实:

  • 我将通过选择所有ID1号码获得一个列表
  • 我需要用ID1和ID2检查我有多少ID2重复记录(可能返回2条以上的记录)
  • 如果我有多条记录具有相同的ID1和ID2,我将需要从这些重复记录中检查其中一条(如果有)具有相同的数量。在这个记录中,我需要得到重复次数最多的最新(使用日期变量)记录
让我尝试一下: 样本1:

  • 记录1:ID1=1,ID2=2,数量=100,日期=11/09/2011
  • 记录2:ID1=1,ID2=2,数量=100,日期=2011年11月10日
  • 记录3:ID1=1,ID2=2,数量=10,日期=2011年11月10日
  • 记录4:ID1=1,ID2=2,数量=13,日期=11/10/2011
我需要将元素(ID1=1,ID2=2,Quanity=100,Date=11/10/2011)添加到te结果列表中。重复2次,比2011年9月11日的记录更新

样本2:

  • 记录1:ID1=1,ID2=2,数量=100,日期=11/01/2011
  • 记录2:ID1=1,ID2=2,数量=100,日期=11/02/2011
  • 记录3:ID1=1,ID2=2,数量=120,日期=11/05/2011
  • 记录4:ID1=1,ID2=2,数量=120,日期=2011年7月11日
我需要添加元素(记录4:ID1=1,ID2=2,Quanity=120,Date=11/07/2011)。即使数量为100和120的两个记录范围相同,最近的一个记录是从2011年7月11日开始的

样本3:

  • 记录1:ID1=1,ID2=2,数量=120,日期=11/01/2011
  • 记录2:ID1=1,ID2=2,数量=120,日期=11/02/2011
  • 记录3:ID1=1,ID2=2,数量=120,日期=11/05/2011
  • 记录4:ID1=1,ID2=2,数量=100,日期=2011年7月11日
  • 记录5:ID1=1,ID2=2,数量=100,日期=11/08/2011
我需要添加元素(记录3:ID1=1,ID2=2,Quanity=120,Date=11/05/2011)。即使有11/08的记录,120个数量重复了3次,所以我会得到这个数量的最新记录

样本4:

  • 记录1:ID1=1,ID2=2,数量=120,日期=11/01/2011
  • 记录2:ID1=1,ID2=3,数量=120,日期=11/02/2011
  • 记录3:ID1=1,ID2=4,数量=120,日期=11/05/2011
  • 记录4:ID1=1,ID2=5,数量=100,日期=2011年7月11日
  • 记录5:ID1=1,ID2=5,数量=100,日期=11/08/2011
我需要添加记录1、记录2、记录3和记录5(第5条记录重复,我需要获取最新的记录)

我刚花了一大堆代码,但性能不好,所以我想问你们是否知道更好的解决方案

我将留下一个我试图开发的代码,让我们看看这对你们是否有意义

我得到了以下实体:

public class MyEntity
{
  pulic int? ID1 {get; set;}
  pulic int? ID2 {get; set;}
  pulic int? Quantity {get; set;}
  public DateTime? Date {get; set;} 
}
我的控制器有一种方法,将此实体用作列表,并从数据库接收buch os registers:

List<MyEntity> list = new List<MyEntity>();

//The Method "getObjects" recieves the parameters ID1, ID2. Since the 2nd parameter is null.
//It will return a list with all the ID2 registers since they have the same ID1 as the one I used.
list.AddRange(getObjects(ID1,null);
List List=新列表();
//方法“getObjects”接收参数ID1、ID2。因为第二个参数为空。
//它将返回一个包含所有ID2寄存器的列表,因为它们的ID1与我使用的相同。
AddRange(getObjects(ID1,null);
我完全不知道如何继续我的要求。我不知道是否最好先把只有一条记录的记录分开,然后过滤其他记录,或者一起做所有事情


有一些用户将要检查卡车内的一些设备。进入每个卡车的每个人都会生成一个id(ID1)和日期。此id指的是该特定用户正在进行的孔会议。每个设备(ID2,另一个表)都有一个专用id和其特定数量(数量)因为这取决于人,我需要考虑这次会议可能有任何错误。这就是为什么我需要考虑重复的数量。如果我在最后120个数量重复了四次之后有100次的两次,我会考虑ID1和ID2的最后一个登记,得到120个数量< /P> < P>我会打破它。n分为两个简单的步骤

// for each combination of ID1 and ID2
// return the latest item from the 
// most frequently-occuring quantity
IEnumerable<MyEntity> GetLatestMaxByID(IEnumerable<MyEntity> list) {
    foreach (var group in list.GroupBy(x => new { x.ID1, x.ID2 }))
        yield return GetSingleItemForIDs(group);
}

// return the latest item from the 
// most frequently-occuring quantity
MyEntity GetSingleItemForIDs(IEnumerable<MyEntity> list) {
    return list.GroupBy(x => x.Quantity)
               .MaxBy(g => g.Count())
               .MaxBy(x => x.Date);
}

// use MaxBy from the morelinq (http://code.google.com/p/morelinq) 
// or use a simplified one here
// Get the maximum item based on a key
public static T MaxBy<T, U>(this IEnumerable<T> seq, Func<T, U> f) {
    return seq.Aggregate((a, b) => Comparer<U>.Default.Compare(f(a), f(b)) < 0 ? b : a);
}
//对于ID1和ID2的每个组合
//从中返回最新的项目
//最常发生量
IEnumerable GetLatestMaxByID(IEnumerable列表){
foreach(list.GroupBy(x=>new{x.ID1,x.ID2})中的var组)
收益返回GetSingleItemForIDs(组);
}
//从中返回最新的项目
//最常发生量
MyEntity GetSingleItemForId(IEnumerable列表){
返回列表.GroupBy(x=>x.Quantity)
.MaxBy(g=>g.Count())
.MaxBy(x=>x.Date);
}
//使用morelinq中的MaxBy(http://code.google.com/p/morelinq) 
//或者在这里使用一个简化的
//根据密钥获取最大项
公共静态T MaxBy(此IEnumerable seq,函数f){
返回序列聚合((a,b)=>Comparer.Default.Compare(f(a),f(b))<0?b:a);
}

请发布您编写的代码。我认为您需要更清楚地了解您正在做的事情。这看起来像是一个精选的N+1问题,但我可能错了,因为我不知道“我是否会获得重复的最新记录。”表示选择查询、for循环、Linq查询或其他完全不同的查询。您可以添加源代码吗?如果没有源代码,我们将在黑暗中拍摄,以了解如何帮助您的代码更高效。@ConradFrix我有一个日期(日期时间类型不可能重复)变量,我可以得到最新的一个,因为我有所有重复的(元素有相同的ID1,ID2和数量)记录。我只是添加了一些信息,你能帮我吗?我还在努力开发