Foreach внутри Foreach C # - PullRequest
       13

Foreach внутри Foreach C #

0 голосов
/ 06 марта 2019

Сохраняя ценность, foreach внутри foreach, но внутренний foreach будет основываться на внешнем foreach.Все, что я хочу, это сохранить две данные, но внутренний foreach будет основываться на значении Model2.SRL внешнего foreach.

string[] _stpr = {"\r\n"};
string[] _slr = Model1.SRL.Split(_stpr, RemoveEmptyEntities);
string[] _chs = Model1.CHS.Split(_stpr, RemoveEmptyEntities);
foreach(string _s in _slr)
{
   Model2.SRL = _s; // Test Value : SRL-1 // TotalCount = 5
   Model2.DTL = "Detail";
   Model2.CHS = string.empty;

   functionToSave(ref transaction);
   foreach(string _c in _chs)
   {
      Model2.SRL = _s; // will base on value from outer loop
      Model2.CHS = _c; // Test Value : CHS-1
      functionToSave(ref transaction);
   }
}
commit();

При выполнении этого результатом является то, что последнее значение внутреннего foreach будет иметь все столбцы в БД, если их несколько.

Output Result:                          
SRL = SRL-1,    CHS = CHS-1,            
SRL = SRL-2,    CHS = CHS-1,            
SRL = SRL-3,    CHS = CHS-1,            
SRL = SRL-4,    CHS = CHS-1,            
SRL = SRL-5,    CHS = CHS-1,            
Expected Result:
SRL = SRL-1,   CHS = CHS-1
SRL = SRL-2,   CHS = CHS-2
SRL = SRL-3,   CHS = CHS-3
SRL = SRL-4,   CHS = CHS-4
SRL = SRL-5,   CHS = CHS-5

Ответы [ 2 ]

1 голос
/ 06 марта 2019

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

Это похоже на хороший вариант использования для Zip. Предполагая, что у вас есть директива using System.Linq; над этим кодом:

string[] _stpr = {"\r\n"};
string[] _slr = Model1.SRL.Split(_stpr, RemoveEmptyEntities);
string[] _chs = Model1.CHS.Split(_stpr, RemoveEmptyEntities);
int _counter = 0;
foreach(var _s in _slr.Zip(_chs, (first,second) => new { first, second })
{
   Model2.SRL = _s.first;
   Model2.DTL = "Detail";
   Model2.CHS = _s.second;
}
commit();

Возможно, вы сможете улучшить это дальше. Например. у вас, кажется, есть один экземпляр Model2, который повторно используется каждый раз в цикле. Я бы ожидал что-то вроде:

_slr.Zip(_chs, (first,second) => new WhateverModel2Is
    { SRL = first, CHS = second, DTL = "Detail" })

И работать с этими экземплярами каждый раз в цикле.

0 голосов
/ 06 марта 2019

Нашел ответ. Я просто добавил инкрементный счетчик на строку, так как это был массив.

string[] _stpr = {"\r\n"};
string[] _slr = Model1.SRL.Split(_stpr, RemoveEmptyEntities);
string[] _chs = Model1.CHS.Split(_stpr, RemoveEmptyEntities);
int _counter = 0;
foreach(string _s in _slr)
{
   Model2.SRL = _s; // Test Value : SRL-1 // TotalCount = 5
   Model2.DTL = "Detail";
   Model2.CHS = _chs[_counter];
   _counter++;
}
commit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...