我有一个数据表,其中包含一个以逗号分隔值的列。我正在尝试制定一个与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行。
感谢。
答案 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)))