User-8621695 Ответов: 2

Как я могу оптимизировать код C#?


Привет эксперты,

Мне нужна ваша помощь в нижеследующем отношении. У меня есть имя таблицы: "Persons", имеющее несколько полей, включая ID, PersonID, Name и т. д.
Чтобы получить табличные данные, я запускаю "Select * from Persons" и устанавливаю значения в dataset и привязываю его к источнику данных Grid. Теперь я хочу удалить несколько Персонид из этого списка.
Поэтому для этого я создал список "listRecords" и добавил Эти PersonID в этот список. После этого я создал цикл, как показано ниже, и удалил элементы, когда PersonID совпадает. Он работает нормально, но его сложность высока, так как я создаю цикл по списку, а затем сравниваю его со значением таблицы набора данных.
Мне нужна ваша помощь, чтобы оптимизировать его.
if (listRecords != null && listRecords.Count > 0)
                    {
                        foreach (string item in listRecords)
                        {
                            for (int i = 0; i < dataset.Tables[0].Rows.Count; i++)
                            {                                
                                if (item.Equals(dataset.Tables[0].Rows[i]["PersonID"], StringComparison.InvariantCultureIgnoreCase))
                                {
                                    dataset.Tables[0].Rows.Remove(dataset.Tables[0].Rows[i]);
                                }
                            }

                        }
                    }					
					grid.DataSource = dataset.Tables[0].DefaultView;

Спасибо,

Что я уже пробовал:

Вышеупомянутый код работает нормально, что я и пробовал.

0x01AA

Как насчет того, чтобы запустить SQL DELETE FROM PERSONS WHERE PersonId = :PersonIdа потом освежите свой SELECT *...?

User-8621695

Спасибо, но мне не нужно делать SQL-вызов с операцией удаления,так как я делаю еще несколько операций с данными, а затем удаляю их.

0x01AA

Извиняюсь. Теперь я понимаю, что был совершенно неправ.

2 Ответов

Рейтинг:
2

OriginalGriff

Попробуй:

SELECT * FROM Persons WHERE PersonID NOT IN (... list of unwanted IDs ...)


Dave Kreskowiak

И избавьтесь от * в SELECT.

Извини, это моя любимая мозоль.

OriginalGriff

И мои - но я понятия не имею, что это за колонны.

Рейтинг:
2

PIEBALDconsult

Во - первых, как говорит Грифф, сделайте как можно больше работы в базе данных.

Во-вторых, избегайте foreach петли при for петли будет достаточно.

В-третьих, используйте DataTable.DefaultView фильтровать (и сортировать) строки в таблице, когда это возможно.

В-четвертых, не ссылайтесь на столбцы по имени в цикле-используйте порядковый номер.