Очистите DataTable в петле Перемещение используемых элементов к двум другим источникам данных [дубликат] -- c# поле с участием linq поле с участием datatable пол Связанный проблема

Clean a DataTable in a loop moving used items to two other DataTables [duplicate]


0
vote

проблема

русский
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»>
Этот вопрос уже имеет ответ здесь :
Коллекция была изменена; Операция перечисления может не выполнить в кроме операции (1 ответ)
Закрыто 5 лет назад .

У меня есть главный <код> DataTable называется <код> dtMain и два детя ребенка <код> dtSuccess и <код> dtFail . В то время как цикла, которая имеет 10 секундную задержку в каждой итерации некоторых элементов dtMain , будет добавлена ​​в <код> dtSuccess и <код> dtFail . Таким образом, в каждой итерации я хотел бы мой <код> dtMain быть чистым от всего, что находится в тех других двух списках.

Я поставлю код, который я пробовал здесь, но к сожалению, он не работает.

 <код> while (dtMain.Rows.Count > 0) {    var query = dt.AsEnumerable().Except(dtSuccess.AsEnumerable(), DataRowComparer.Default)                  .AsEnumerable().Except(dtFail.AsEnumerable(), DataRowComparer.Default);    if (dtMain.AsEnumerable().Any())         dtMain = query.CopyToDataTable();    Thread.SLeep(10000); }   

Я получил исключения, такие как:

Коллекция

была изменена; Операция перечисления может не выполнить

и <код> InvalidOperationException

Источник не содержит регистраций

Английский оригинал

I have a main DataTable called dtMain and two child DataTables dtSuccess and dtFail. In a while loop that has a 10 second delay in each iteration some items in dtMain will be added to dtSuccess and dtFail. So in each iteration I would like my dtMain to be clean from everything that is in those other two lists.

I will put the code I have tried here but unfortunately it does not work.

while (dtMain.Rows.Count > 0) {    var query = dt.AsEnumerable().Except(dtSuccess.AsEnumerable(), DataRowComparer.Default)                  .AsEnumerable().Except(dtFail.AsEnumerable(), DataRowComparer.Default);    if (dtMain.AsEnumerable().Any())         dtMain = query.CopyToDataTable();    Thread.SLeep(10000); } 

I have received Exceptions such as:

Collection was modified; enumeration operation might not execute

And InvalidOperationException

The source contains no DataRows

</div
        
       
       

Список ответов

0
 
vote

Попробуйте зацикливаться на переменной (это решит вашу коллекцию модифицированной проблемой):

 <код> int i = dtMain.Rows.Count ;  while ( i > 0) {    var query = dt.AsEnumerable().Except(dtSuccess.AsEnumerable(), DataRowComparer.Default)                  .AsEnumerable().Except(dtFail.AsEnumerable(), DataRowComparer.Default);    if (dtMain.AsEnumerable().Any())         dtMain = query.CopyToDataTable();    Thread.SLeep(10000);    i = dtMain.Rows.Count ; }   
 

try looping on a variable (This will solve your collection modified problem) :

int i = dtMain.Rows.Count ;  while ( i > 0) {    var query = dt.AsEnumerable().Except(dtSuccess.AsEnumerable(), DataRowComparer.Default)                  .AsEnumerable().Except(dtFail.AsEnumerable(), DataRowComparer.Default);    if (dtMain.AsEnumerable().Any())         dtMain = query.CopyToDataTable();    Thread.SLeep(10000);    i = dtMain.Rows.Count ; } 
</div
 
 
0
 
vote
<Р> Вы модифицирования DataTables dtSuccess и dtFail в другом потоке? Вы должны будете использовать технику синхронизации, чтобы только один поток за один раз. <Р> Если честно, DataTables не очень хороший механизм для этого. На самом деле, я редко найти DataTables быть хорошим решением. Одним из таких решений может быть прекратить использование DataTable dtMain, и преобразовать его в <код> ConcurrentQueue<DataRow> . Попросите другую нить (s) тянуть из очереди, а основной поток может просто проверить, если TryPeek в очереди не удается. Или использовать блокировку ReaderWriter доступа синхронизируется с dtMain.
 

Are you modifying the dtSuccess and dtFail datatables in another thread? You'll need to use a synchronization technique to only allow one thread in at a time.

To be honest, datatables aren't a very good mechanism for this. In fact, I rarely find datatables to be a good solution. One such solution might be to stop using the dtMain datatable, and convert it to a ConcurrentQueue<DataRow>. Have your other thread(s) pull from the Queue, and the main thread can just check to see if TryPeek on the queue fails. Or use a ReaderWriter lock to synchronize access to dtMain.

</div
 
 

Связанный проблема

2  C #, Linq2SQL - трюки для получения объекта ViewModel с данными соотношения?  ( C linq2sql tricks to fetch a viewmodel object with relation data ) 
Я не знаю linq2sql так хорошо, и мне было интересно, есть ли трюк для этого, вероятно, общий сценарий MVVM. У меня есть контекст данных Linq2SQL, содержащий м...

0  Streaminsight и долгосрочные запросы  ( Streaminsight and long running queries ) 
У меня есть приложение, построенное на вершине Streaminsight 1.2, который имеет несколько постоянных запросов, выполняющих некоторые расчеты в операторах опре...

0  Присоединиться к запросу с LINQ  ( Join query with linq ) 
Я пытаюсь здесь сделать несколько левых присоединиться к запросу LINQ, но я бы сказал, что понятия не имею, как материализовать эту идею. в основном вот 3 с...

0  Ошибка структуры объекта: ошибка загрузки указанного ресурса метаданных  ( Entity framework error error loading specified metadata resource ) 
Я знаю, что это известная проблема, но решение для моего случая не в других вопросах, я думаю. У меня есть проект в C #. В этом проекте у меня есть мой EDMX...

1  Разница между несколькими наследованиями и интерфейсами в C #  ( Difference between multiple inheritance and interfaces in c sharp ) 
делает C # действительно поддерживать многократное наследование. Люди говорят, что он поддерживает многократное наследование в виде интерфейсов? Но я не думаю...

1  Как я могу прочитать все предметы питания?  ( How do i read all feed items ) 
Я хочу прочитать все элементы подачи в C #. Решения, которые я обнаружил, только для новейших элементов, таких как только последние 10 дней. У кого-нибудь е...

3  Как мне расположить эллипс на сетке Silverlight?  ( How do i position an ellipse on a silverlight grid ) 
Я создаю приложение Silverlight, которое позволит вам нажать в два места на экране и нарисовать эллипс, основной ось которого начинается и заканчивается в мес...

2  Высевание многих для многих кода EF первые отношения  ( Seeding many to many ef code first relationship ) 
Есть несколько других сообщений по этой теме, которую я видел, но я не смог получить правильный ответ еще (моя собственная вина, я уверен), но я хочу сеять ба...

5  Можем ли мы использовать ответ .Flush () вместо ответа. Денды ()  ( Can we use response flush instead of response end ) 
<Код> Response.End() генерирует <код> ThreadAbortException . Использование <код> HttpContext.Current.ApplicationInstance.CompleteRequest вместо этого не р...

2  Обработка ошибок в свойствах, я знаю, что это плохо, нужно исправить, хотя  ( Error handling in properties i know its bad need fix though ) 
Я знаю свою плохую практику, чтобы поставить обработку ошибок в свойствах, я просто хочу знать , где я должен положить ошибку обработки ошибок. Я знаю, что з...

1  Как довольно печатать метод итератора  ( How to pretty print the iterator method ) 
Я хочу получить имя метода со своими аргументами метода итератора и я борюсь, чтобы найти простое решение. Итераторы генерируются компилятором в результате. И...

4  Создайте VCARD, который можно скачать на Android с помощью ASP.NET  ( Generate vcard that can be downloaded on android using asp net ) 
Я пробую довольно некоторое время, чтобы сгенерировать VCARD, используя ASP.NET (C #), которые можно загрузить на устройство Android. Процесс генерации карт...

0  Как бы я пошел на рисование в программе краски с чувствительностью давления?  ( How would i go about drawing in a paint program with pressure sensitivity ) 
Я пишу программу краски в родах, используя C # .NET / WinForms и чувствительность к давлению является обязательным. У меня все настроено и получаю информацию ...

0  Как нарисовать в автономном режиме круг 1500 метров в диапазоне Geocoordinate в Windows Phone 8  ( How to draw offline circle of 1500 meters range over the geocoordinate in window ) 
Я хочу нарисовать автономный круг над геокоординаном в Windows Phone Этот круг составляет 1500 метров, и он ищет цель в этом диапазоне это мой образ, где у...

-2  Гольф HCP Calculator  ( Golf hcp calculator ) 
Я работаю над программой в ASP.NET MVC, где моя цель - сделать показатель для гольфа. в Golf у каждого игрока есть гандикап, который дает им ряд дополнитель...

Связанный проблема

2  C #, Linq2SQL - трюки для получения объекта ViewModel с данными соотношения? 
0  Streaminsight и долгосрочные запросы 
0  Присоединиться к запросу с LINQ 
0  Ошибка структуры объекта: ошибка загрузки указанного ресурса метаданных 
1  Разница между несколькими наследованиями и интерфейсами в C # 
1  Как я могу прочитать все предметы питания? 
3  Как мне расположить эллипс на сетке Silverlight? 
2  Высевание многих для многих кода EF первые отношения 
5  Можем ли мы использовать ответ .Flush () вместо ответа. Денды () 
2  Обработка ошибок в свойствах, я знаю, что это плохо, нужно исправить, хотя 
1  Как довольно печатать метод итератора 
4  Создайте VCARD, который можно скачать на Android с помощью ASP.NET 
0  Как бы я пошел на рисование в программе краски с чувствительностью давления? 
0  Как нарисовать в автономном режиме круг 1500 метров в диапазоне Geocoordinate в Windows Phone 8 
-2  Гольф HCP Calculator