Как повысить производительность моего метода, созданного для удаления дубликатов из DataView? - PullRequest
0 голосов
/ 28 июля 2011

Я создал метод для удаления дубликатов из DataView. У меня нет возможности изменить запрос SQl, поэтому я могу изменить только существующие данные, извлеченные из базы данных в DataView.

Данные просмотра данных

Id, Name, Date

1, Павел, 12-05-2011
2, Марк, 12-05-2011
1, Павел, 12-05-2011
2, Марк, 12-05-2011

Мой метод:

 private static void RemoveDuplicates(DataView source, string keyColumn)
    {            
        DataRow[] dataRows = new DataRow[source.Table.Rows.Count];
        source.Table.Rows.CopyTo(dataRows, 0);

        var uniquePrimaryKeys = new List<Guid>(duplicateTable.Rows.Count);

        foreach (DataRow row in duplicateTable.Rows)
        {
            if (uniquePrimaryKeys.Contains((Guid)row[keyColumn]))
                source.Table.Rows.Remove(row);
            else
                uniquePrimaryKeys.Add((Guid)row[keyColumn]);
        }
    }

Интересно, есть ли лучший метод для достижения того же результата, но быстрее.

Ответы [ 2 ]

1 голос
/ 28 июля 2011

На самом деле, в ADO.NET добавлена ​​(по-видимому, не очень известная) функция, позволяющая создавать новую таблицу, содержащую отдельные записи из существующей таблицы.Вот как это работает: ..... .....

http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataset/thread/ed9c6a6a-a93e-4bf5-a892-d8471b84aa3b/

0 голосов
/ 28 июля 2011

Не могли бы вы использовать группу linq в качестве альтернативы? Я не могу сказать, насколько быстрее это будет, но я смею сказать, что это будет хорошо оптимизировано.

var result = from x in source.Table.AsEnumerable()
    group x by new { id = x.Field<int>("ID"), Name = x.Field<string>("Name"), Date = x.Field<DateTime>("Date") }
    into groupedResults
    select groupedResults.Key;
...