根据具有逗号分隔值的列选择数据表行

时间:2017-04-13 18:59:41

标签: c# datatable

我有一个数据表,其中包含一个以逗号分隔值的列。我正在尝试制定一个与dt.Select一起使用的过滤器,需要一些帮助。

数据表看起来像这样:

col1 | col2 | Some_IDs | col4
-----|------|----------|------
  a  |  b   | 1,2,3    | g
  c  |  d   | 2        | h
  e  |  f   | 1, 3     | i

如果我正在寻找" 2",我需要返回第1行和第2行;如果我正在寻找1,3我需要返回第1行和第3行。

感谢。

1 个答案:

答案 0 :(得分:3)

如果您可以使用Linq,则以下内容应该有效:

// string filter = can be: "2" , "1,3", etc
var filterArray = filter.Split(',').Select(s => s.Trim());
DataRow[] dataRows = dt.AsEnumerable()
    .Where(row=>filterArray.All(f=>row.Field<string>("Some_IDs")
                                 .Split(',')
                                 .Any(v=>v.Trim() == f)))
    .ToArray();

“上方”将匹配包含所有过滤器值的行。

如果您想要与某些过滤器值匹配的行,请使用filterArray.Any代替.All

.Where(row=>filterArray.Any(f=>row.Field<string>("Some_IDs")
                                 .Split(',')
                                 .Any(v=>v.Trim() == f)))