使用Linq在List中以逗号分隔值查找值

时间:2014-02-18 13:10:43

标签: c# linq list

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

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

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---));

答案 1 :(得分:1)

尝试:

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

答案 2 :(得分:1)

使用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)
{
    // ...
}