c# - 如何通过 Regex.Split() 在 LINQ 查询中创建一个 string[]

标签 c# linq parsing

我正在使用 LINQ 解析一组以逗号分隔的数据。在 LINQ 查询中,我多次调用 Regex.Split 以解析逗号分隔项。我想弄清楚如何避免多次调用 .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 查询中,我调用 Regex.Split 以确定每个行项目的索引值。直觉上,在我看来,为每个匿名 Prop 调用 .Split() 是不必要的开销。

如何在 LINQ 查询中创建一个变量以在范围内拆分行,这样当我设置 anon 对象的属性时,我不必调用 Regex.Split() 方法?

最佳答案

您可以使用 let clause 将子表达式存储在变量中.

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

关于c# - 如何通过 Regex.Split() 在 LINQ 查询中创建一个 string[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8188246/

相关文章:

c# - 将WITH ROLLUP SQL 语句转换为LINQ

c# - 为 Kentico 对象生成类

c# - 如果找到匹配项,则选择特定记录,否则选择 IGrouping<T> 中的第一条记录

android - 替换标准的 Android JSON 解析器以获得更好的性能?

c# - DotNetOpenAuth - 名称为 'OriginalHttpRequestUri' 的属性不存在异常

c# - 将数学公式应用到新列表时如何保持精度?

c# - 无法将 Linq.IOrderedEnumerable<T> 转换为 Linq.IQueryable<T>

c# - 使用Linq和C#从DataTable中选择Distinct

Javascript 文本数组解析

parsing - 使用属性语法装饰解析树