我怎样才能在列表中拆分并获得不同的单词?

时间:2016-04-20 17:07:43

标签: c# linq

我的样本数据coloumn来自CSV文件

|----Category------------|

 SHOES
 SHOES~SHOCKS
 SHOES~SHOCKS~ULTRA SOCKS

我希望拆分特定列,并在列表中获取不同的值,如

SHOES
SHOCKS
ULTRA SOCKS

我尝试了以下操作,但它没有按预期工作。

var test = from c in products select c.Category.Split('~').Distinct().ToList();

它实际上会返回以下内容。

enter image description here

有什么想法吗?谢谢。

5 个答案:

答案 0 :(得分:2)

在删除重复项之前,我会使用SelectMany“展平”列表:

products.SelectMany(c => c.Category.Split('~'))
        .Distinct()

答案 1 :(得分:1)

您可以使用SelectMany展平收藏集:

products.SelectMany(p => p.Category.Split('~')).Distinct().ToList();

答案 2 :(得分:1)

你很亲密,你只需要通过SelectMany()电话来整理你的收藏品以拉出每个分组的各个项目:

// The SelectMany will map the results of each of your Split() calls
// into a single collection (instead of multiple)
var test = products.SelectMany(p => p.Category.Split('~'))
                   .Distinct()
                   .ToList();

您可see a complete working example demonstrated here,见下文:

// Example input
var input = new string[] { "SHOES","SHOES~SHOCKS","SHOES~SHOCKS~ULTRA SOCKS" };
// Get your results (yields ["SHOES","SHOCKS","ULTRA SOCKS"])
var output = input.SelectMany(p => p.Split('~'))
                  .Distinct()
                  .ToList();

答案 3 :(得分:1)

使用list of strings将此SelectMany()列表合并到一个列表中,然后将另一个区别添加到您的列表中。

var test = from c in products select c.Category.Split('~').Distinct().ToList().SelectMany(x => x).Distinct().ToList();

答案 4 :(得分:1)

以下是您在查询语法中的表现方式。

var test = (from p in products 
            from item in p.Category.Split('~')
            select item).Distinct().ToList();