【发布时间】:2011-11-09 20:45:01
【问题描述】:
我得到了一个包含许多属性的集合列表。特别是其中 3 个是:ID1、ID2(两个 IDS 都是我表中的键,在这种情况下 ID1 将始终相同)、数量和日期。
一些事实:
- 我将通过选择所有 ID1 号码来获得一个列表。
- 我需要检查 ID1 和 ID2 有多少个 ID2 重复记录(可能返回 2 条以上的记录)。
- 如果我有超过 1 条具有相同 ID1 和 ID2 的记录,我将需要从那些重复记录中检查一个(如果它们有)相同数量的记录。在此记录中,我需要获取最新的(使用 DATE 变量)记录并重复更多次。
让我尝试一下: 示例 1:
- 记录 1:ID1 = 1,ID2 = 2,数量 = 100,日期 = 11/09/2011
- 记录 2:ID1 = 1,ID2 = 2,数量 = 100,日期 = 11/10/2011
- 记录 3:ID1 = 1,ID2 = 2,数量 = 10,日期 = 11/10/2011
- 记录 4:ID1 = 1,ID2 = 2,数量 = 13,日期 = 11/10/2011
我需要将元素 (ID1 = 1, ID2 = 2, Quantity = 100, Date = 11/10/2011) 添加到结果列表中。重复 2 次,并且比日期为 11/09/2011 的记录更新
示例 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,日期 = 11/07/2011
我需要添加元素(记录 4:ID1 = 1,ID2 = 2,数量 = 120,日期 = 11/07/2011)。即使数量为 100 和 120 的 2 条记录的范围相同,最新的一条是从 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,日期 = 11/07/2011
- 记录 5:ID1 = 1,ID2 = 2,数量 = 100,日期 = 11/08/2011
我需要添加元素(记录 3:ID1 = 1,ID2 = 2,数量 = 120,日期 = 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,日期 = 11/07/2011
- 记录 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 注册:
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);
我绝对不知道如何处理我的要求。我不知道是否最好首先将只有一条记录的记录分开,然后过滤其他记录或一起做所有事情。
有些用户要检查卡车内的一些设备。每辆卡车上的每个人都会生成一个带有日期的 ID (ID1)。这个ID指的是这个特定用户正在做的空洞会议。每台设备(ID2,另一个表)都有一个专属的ID和它的具体数量(Quantity)。由于这取决于人,我需要考虑到这次会议可能有任何错误。这就是为什么我需要考虑大部分时间重复的数量。如果在最后一个重复四次的 120 个数量之后我有两次 100 个数量,我会考虑 ID1 和 ID2 中最后一个寄存器获得 120 个数量
【问题讨论】:
-
请贴出你写的代码
-
我认为您需要更清楚自己在做什么。它看起来像一个 SELECT N+1 问题,但我可能是错的,因为我不知道“我会得到重复记录的最新记录”。表示 SELECT 查询、for 循环或 Linq 查询,或完全不同的东西
-
可以添加源代码吗?我们在没有它的情况下在黑暗中拍摄,看看我们如何帮助您的代码更有效率。
-
@ConradFrix 我有一个 Date(DateTime 类型,无法复制)变量,我可以获得最新的变量,因为我拥有所有重复的(具有相同 ID1、ID2 和数量的元素)记录
-
伙计们,我刚刚添加了一些信息,您能帮帮我吗?我仍在尝试开发这个.. 谢谢!