【问题标题】:Using Linq to find a value in comma separated value in a List使用 Linq 在 List 中查找逗号分隔值中的值
【发布时间】:2014-02-18 13:10:42
【问题描述】:

我有一个文件类,每个文件都有行列表。每行都有包含逗号分隔值的代码。我需要查找逗号分隔数据中是否存在特定值。

public class File
{
    public List<Row> Rows { get; set; }
}

public class Row
{
    public string Code{ get; set; }
}

这里的代码有逗号分隔值,如 abc、def、ghi || xyz, ghj, klm

我需要使用 Linq 从文件中的行列表中选择具有 abc 作为代码的行

【问题讨论】:

  • 对结果数组使用string.Split 然后使用LINQ Any 扩展方法。

标签: c# linq list


【解决方案1】:

如果你只想要一个布尔值:

var isPresent = listOfRows.Any(r => r.Code.Split(",").Any(s => (---your condition---)));

如果您希望代码属性值与您的条件匹配的行:

var rows = listOfRows.Where(r => r.Code.Split(",").Any(s => (---your condition---)));

如果您只需要 Code 属性值:

var values = listOfRows.Select(r => r.Code.Split(",")).Where(s => (---your condition---));

【讨论】:

    【解决方案2】:

    试试:

    foreach (var line in filelines) {
      var exists = line.Split(',').Any(s => s == mySearchValue);
    }
    

    【讨论】:

      【解决方案3】:

      使用String.SplitEnumerable.Any

      string value = "search_me";
      bool hasValue = file.Rows.Any(fr => fr.Code.Split(',').Any(v => v == value));
      

      Contains:

      file.Rows.Any(fr => fr.Code.Split(',').Contains(value));
      

      更新(根据您的编辑):如果您想获得第一个包含此代码的Row

      Row row = file.Rows.FirstOrDefault(fr => fr.Code.Split(',').Contains(value));
      if(row != null)
      {
          // ...
      }
      

      或所有行:

      IEnumerable<Row> allRows = file.Where(fr => fr.Code.Split(',').Contains(value));
      foreach(Row row in allRows)
      {
          // ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-04
        • 2020-01-04
        相关资源
        最近更新 更多