【问题标题】:Remove duplicate values from ListView with the lower TIME value?从具有较低 TIME 值的 ListView 中删除重复值?
【发布时间】:2014-03-01 00:17:47
【问题描述】:

我有一个列表视图控件,其中填充了从 SQL 语句返回的记录。字段可能类似于:

SSN------|NAME|DATE----|TIME--|SYS
111222333|Bell|20140130|121507|P
123456789|John|20140225|135000|P
123456789|John|20140225|135002|N

“重复”是从 ChangeLog 生成的,例如地址更改。然而,由于糟糕的数据库设计,我无法控制,如果成员恰好是 SYS 的成员,地址更改将创建 2 条记录。

在我的列表视图中遍历每条记录的最佳方法是什么,找到 SSNDATE 的重复值(如果人是两者的成员,则可以为 SYS 生成一条记录),并删除具有较低TIME 值的重复值?

我正在尝试做一个基于代码的解决方案而不是 SQL,因为真正的 SQL 语句已经非常复杂,而且这个应用程序只需要维护到 10 月。

【问题讨论】:

  • 更改 SQL 查询不是更好吗?
  • ListView 是一个 UI 控件,不能用于操作数据。你为什么首先返回重复项?你在 SQL 中问过同样的问题,但你没有接受有效的答案。
  • SQL Query 与用作示例的相比已经非常复杂。 @Blam,我不确定您在 SQL 中指的是什么,但这是一个不同的问题。由于糟糕的数据库设计无法也不会很快得到纠正,因此返回了重复项。我只是在寻找通过代码解决问题的最佳途径的想法。
  • Manipulate ListView 不是最好的路线。最好的方法是不返回重复项。与这个问题无关? stackoverflow.com/questions/22045416/…
  • @Blam,我知道这不是最好的路线。但鉴于我在 SQL 方面的经验,我相信基于代码的解决方案将提供更高的可维护性,直到 10 月份这个特定的应用程序将被废弃。至于你提到的问题,我想类似的问题,不同的结局。该问题围绕 TIMEC 字段的数据转换展开。这些值没有对齐,导致我在应用程序中的打印计数偏离了方向。所有这一切都源于糟糕的数据库设计,即为 2 个独立的系统保留表,这种设计早在我来到这里之前就已实施,而且不太可能很快改变。

标签: c# .net listview duplicates listviewitem


【解决方案1】:

为此,我假设您有一些带有这些记录属性的类,这些记录的属性可以轻松访问,例如SSNTime,我还假设它们都是字符串。在下面的代码中,我将此对象称为Record

提示:您可能希望删除将 SYS 标志设置为 False 的项目,而不是按时判断它(可能没有什么不同)。

我没有故意使用任何 lambda fun 来保持这个简单易读。

每次将项目加载到 ListView....根据可用信息提出问题。

//Turn the ListView's ItemCollection into an easy to use List<Record>
List<Record> records = myListView.Items.OfType<Record>().ToList();

//Grab records with duplicate SSNs but with lower Time values 
List<Record> recordsToRemove = new List<Record>();
foreach (var record in records)
{
    foreach (var r in records)
    {
        if (record.SSN == r.SSN && record != r)
        {
            if (int.Parse(r.Time) > int.Parse(record.Time))
                recordsToRemove.Add(record);
            else
                recordsToRemove.Add(r);
        }
    }
}

//Now actually remove the items from the ListView
foreach (var record in recordsToRemove)
{
    myListView.Items.Remove(record);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 2016-08-23
    • 1970-01-01
    相关资源
    最近更新 更多