如何通过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()方法?

如何通过Regex.Split()在LINQ查询中创建字符串[]

您可以使用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]
    };