使用 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 字符串数组的所有元素。搜索之后我想获取列表以检索相关值。如何搜索列表以及如何获取相关列表下一个过程。图片描述细节。
如果有任何查询请问?请提前致谢。
答案 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];
}
}