按第一个字符(字母和数字)对字符串进行分组

时间:2011-09-22 06:07:55

标签: c# linq grouping

我有一个字符串列表(产品名称),我需要从中创建“0-9”,“A”,“B”形式的产品索引(基于产品名称的first-char), ......“Z”。

我这样做:

Products.GroupBy(p => p.Name[0].ToUpper())

但这对于以“0”开头的产品名称不起作用。“9”。

如何修改查询以将所有alpha分组到不同的组(“A”...“Z”),以及将所有数字组合成一个组(“0-9”)?

1 个答案:

答案 0 :(得分:7)

你还没有说过你是使用LINQ to SQL还是LINQ to Objects或其他东西。在LINQ to Objects中我可能会使用:

Products.GroupBy(p = {
    char c = p.Name[0];
    return c >= '0' && c <= '9' ? '0' : char.ToUpper(c);
});

(请注意,ToUpper对文化很敏感 - 顺便说一下 - 目前尚不清楚这是否是你想要的。)

在LINQ to SQL中(无法使用块lambdas,因为它们无法转换为表达式树)我可能会使用let子句在不同的情况下执行相同类型的操作方式:

var query = from product in products
            let c = product.Name[0]
            group product by c >= '0' && c <= '9' ? '0' : char.ToUpper(c);