如何在列表中搜索字符串

时间:2011-03-10 03:52:00

标签: c# .net linq linq-to-objects

使用 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:”};

从这个w列表中我想搜索 sExcelString 字符串数组的所有元素。搜索之后我想获取列表以检索相关值。如何搜索列表以及如何获取相关列表下一个过程。图片描述细节。

enter image description here

如果有任何查询请问?请提前致谢。

2 个答案:

答案 0 :(得分:2)

您想要做的第一次事情是重写这样的“w”表达式:

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

.ToArray()和.ToList()应保存为最后的选项 - 例如,如果您需要将表达式传递给需要数组的函数,或者您确实希望保护结果免受多次迭代的影响。过早调用它们会强制重复数据,并阻止您使用linq的漂亮组合属性来缩小结果范围(从而节省内存和执行时间)。

完成后,您可以添加其他“from”和“where”指令来加入数据,如下所示:

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

请注意,我很少使用查询理解语法;我更喜欢函数调用/ lambda表示法。我也在浏览器中输入了这个。将两者放在一起,它不太可能“按原样”工作。这里最重要的是,这应该让你90%的方式。考虑最后10%的机会真正理解这一切是如何工作的,这样你就可以更好地编写未来的表达。

答案 1 :(得分:0)

将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];
                     }




                }