我有一个包含多选选项字段(字符串)的DataTable。字段中的值存储如下:
Charlie
Alpha
Alpha; Charlie; Delta
Bravo; Charlie
Bravo
Alpha; Bravo; Charlie
我正在尝试在下拉列表中显示唯一列表:
Alpha
Bravo
Charlie
Delta
分割值并返回List<string>
的方法:
private static List<string> GetValues(string multiValueString)
{
string[] delimiters = {"; "};
string[] values = multiValueString.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
return values.ToList<string>();
}
我试图使用LINQ来获取独特的值...但无法弄明白。我以为我可以使用dataTable.AsEnumerable()
,选择.Select(r => GetValues(r.Field<string>("Brand")))
之类的选项,然后以某种方式Union
结果。
但我无法让它发挥作用..我做错了什么?
答案 0 :(得分:2)
您需要使用SelectMany
,因为GetValues
会为每一行返回多个项目(即IEnumerable
)。 SelectMany
将这些可枚举变为单个可枚举的结果类型:
rows.SelectMany(r => GetValues(r.Field<string>("Brand")))
.Distinct();
distinct删除重复的条目。
答案 1 :(得分:1)
// values is IEnumerable<string> (say the return value from GetValues)
var uniqueValues = values.Distinct();
rows.SelectMany(r => GetValues(r.Field<string>("Brand"))).Distinct();