从多选字段的数据中获取不同的选项列表?

时间:2010-11-17 18:24:03

标签: c# linq

我有一个包含多选选项字段(字符串)的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结果。

但我无法让它发挥作用..我做错了什么?

2 个答案:

答案 0 :(得分:2)

您需要使用SelectMany,因为GetValues会为每一行返回多个项目(即IEnumerable)。 SelectMany将这些可枚举变为单个可枚举的结果类型:

rows.SelectMany(r => GetValues(r.Field<string>("Brand")))
    .Distinct();

distinct删除重复的条目。

答案 1 :(得分:1)

使用Enumerable.Distinct

// values is IEnumerable<string> (say the return value from GetValues)
var uniqueValues = values.Distinct();

rows.SelectMany(r => GetValues(r.Field<string>("Brand"))).Distinct();