【问题标题】:Linq extract segment from delimited text columnLinq 从分隔的文本列中提取段
【发布时间】:2009-08-11 01:02:24
【问题描述】:

我有一个由冒号分隔的数据库列,描述了一个类别层次结构,如下所示:

ID |类别

100 |国产:树木:水果:苹果

我想从文本中仅提取层次结构“水果”的第三部分。如何使用 Linq Regex 或 Linq 过滤来提取该段?每次用户选择一个类别时,以这种方式提取信息是个好主意吗?

【问题讨论】:

  • 规范化数据库是一种选择吗?
  • 是的,可以将数据拆分为自己的类别列,例如 cat1、cat2、cat3。那会是标准的做事方式吗?我在下面测试了 Scott Lvey 提供的 Linq 查询,大约需要 7 秒。我敢肯定,在每次点击时都拆分字符串不会是大多数网站这样做的方式。

标签: asp.net linq


【解决方案1】:

你的问题听起来好像你只想要一个 linq 答案 - 所以如果你想使用 linq,你可以这样做......

string s = "Domestic:Trees:Fruit:Apples".Split(':')
           .Select((item, index) => new {item, index})
           .Where(i => i.index == 2)
           .Select(i => i.item);

在 linq 中执行此操作与仅拆分字符串并获取所需的字符串不会使您的代码更易于阅读 - 因此您可能只想考虑按照 Andrew 的建议直接拆分。

【讨论】:

    【解决方案2】:

    试试String.Split(Char[]) 方法:

    返回一个字符串数组,包含 此实例中的子字符串 由 a 的元素分隔 指定的 Unicode 字符数组。

    基本上,您可以根据您指定的分隔符拆分原始字符串。此方法返回一个String[]。这是一个如何使用它的小例子:

    using System;
    
    class Program
    {
        static void Main()
        {
            String s = "Domestic:Trees:Fruit:Apples";
            String[] parts = s.Split(':');
            Console.WriteLine(parts[2]);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-10
      • 2018-10-09
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 2018-05-22
      相关资源
      最近更新 更多