如何通过Regex.Split()在LINQ查询中创建字符串[]
本文关键字:查询 创建 字符串 LINQ Regex 何通过 Split | 更新日期: 2023-09-27 18:15:04
我正在使用LINQ解析一个逗号分隔的数据集。在LINQ查询中,我调用正则表达式。多次分割以解析逗号分隔的项。我试图找出我如何能避免调用。split()方法多次,但我没能弄清楚。
的例子:
// Sample data
string data = @"A,1,Foo1,14:03:08,14/11/11,
A,2,Foo2,11:51:11,09/11/11,
A,3,Foo3,11:51:11, 09/11/11,
A,4,Foo4,12:11:13,09/11/11,
A,5,Foo5,12:23:02,13/11/11,
A,6,Foo6,15:37:58,11/11/11";
// Add each line of data into an array
string[] dataSplit = Regex.Split(data,"'r'n");
// Create an anon object for each line item
var rows = from a in dataSplit
select new {
Name = Regex.Split(a, ",")[0],
ID = Regex.Split(a, ",")[1],
Val = Regex.Split(a, ",")[2],
Time = Regex.Split(a, ",")[3],
Date = Regex.Split(a, ",")[4]
};
注意在LINQ查询中,我调用了正则表达式。拆分以确定每个行项的索引值。直观地说,在我看来,为每个匿名道具调用。split()是不必要的开销。
我如何在LINQ查询中创建一个变量,在范围内分割行,这样当我设置匿名对象的属性时,我不必调用Regex.Split()方法?
您可以使用let
子句将子表达式存储在变量中。
var rows = from a in dataSplit
let splitResult = Regex.Split(a, ",")
select new {
Name = splitResult [0],
ID = splitResult [1],
Description = splitResult [2],
Time = splitResult [3],
Date = splitResult [4]
};
您可以使用let子句只调用一次:
var rows = from a in dataSplit
let splitValues = Regex.Split(a, ",")
select new {
Name = splitValues[0],
ID = splitValues[1],
Val = splitValues[2],
Time = splitValues[3],
Date = splitValues[4]
};
作为旁注-如果您只是基于特定字符或字符串进行分割,而不是表达式,则应该使用String.Split
:
string[] dataSplit = data.Split(new[] {Environment.NewLine}, StringSplitOptions.None);
var rows = from a in dataSplit
let splitValues = a.Split(",")
select new {
Name = splitValues[0],
ID = splitValues[1],
Val = splitValues[2],
Time = splitValues[3],
Date = splitValues[4]
};