Как искать строку в списке - PullRequest
0 голосов
/ 10 марта 2011

Работа над C # . У меня есть набор данных. Я хочу найти строку в этой таблице наборов данных.

DataSet ds = new DataSet();
ds = ImportFromExcel(oOpenFileDialog.FileName, false);
...      
var w = (from p in ds.Tables["ReadExcel"].Rows.Cast<DataRow>().ToArray()
         select p.ItemArray).ToList();

string[] sExcelString = {"Vessel Name :", "Voyage No. :", "Port :", "Terminal :",

"NMC Global File:"};

из этого списка я хочу найти sExcelString строковые массивы всех элементов. После поиска я хочу получить список для извлечения связанных значений. Как искать в списке и как получить связанный список для следующего процесса.Ниже приводится подробное описание.

enter image description here

Если у вас есть вопросы, пожалуйста, спросите? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

Первое, что вы хотите сделать 1002 *, это переписать ваше выражение "w" следующим образом:

var w = from p in ds.Tables["ReadExcel"].AsEnumerable() select p.ItemArray;

.ToArray () и .ToList () должны быть сохранены как параметры последней инстанции & mdash; например, если вам нужно передать выражение в функцию, для которой требуется массив, или если вы действительно хотите защитить результат от нескольких итераций. Вызов их слишком рано вызывает итерацию ваших данных и не позволяет использовать хорошие свойства композиции linq, чтобы сначала сузить результат (и, таким образом, значительно сэкономить память и время выполнения).

Как только это будет сделано, вы можете добавить дополнительные директивы from и where для объединения данных следующим образом:

var w = from p in ds.Tables["ReadExcel"].AsEnumerable()
        where p.ItemArray.Intersect(sExcelString).Any()
        select p.ItemArray;

Обратите внимание, что я редко использую синтаксис понимания запросов; Я предпочитаю функцию вызова / лямбда-нотации Я также набрал это прямо в браузере. Соедините их вместе, и это вряд ли сработает "как есть". Здесь важно то, что это должно пройти 90% пути. Подумайте о том, как последние 10% действительно поняли, как все это работает, чтобы вы могли лучше писать будущие выражения.

0 голосов
/ 13 марта 2011

После помещения значения Excel в набор данных ds.Tables ["ReadExcel"] ** строковый массив ** sExcelString3 значения извлекаются соответственно. Синтаксис подсказок помогает получить значения строки.

         string[] sExcelString3 = { "Vessel Name :", "Voyage No. :", "Port :", "Terminal :", "NMC Global File :","Line : ","ETA : ","Total Container : " };
      //ItemArray);
  var w = (from p in ds.Tables["ReadExcel"].Rows.Cast<DataRow>().ToArray() select p.ItemArray).ToList();

      foreach (string item in sExcelString2)
                {
                    var r3 = (from c in w
                             where c.Any(e => e.ToString().Contains(item))
                             select c).ToList();

                     System.Text.RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex(item);
                     foreach (var it in r3)
                     {
    //                     int r = it.ToList().FindIndex(p => regEx.IsMatch(p.ToString()));
    string result =r3[ it.ToList().FindIndex(p => regEx.IsMatch(p.ToString()))+1];
                     }




                }
...