按第一个字符(alpha和数字)分组字符串

本文关键字:字符串 数字 第一个 字符 alpha | 更新日期: 2023-09-27 18:09:32

我有一个字符串(产品名称)列表,我需要从中创建一个产品索引(基于产品名称的第一个字符)的形式为"0-9"," a ", "B",…"Z"。

我正在做这个:

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

但是对于以"0".."9"开头的产品名称不起作用。

我如何修改查询组所有阿尔法到不同的组("A".."Z"),以及所有数字到一个单一的组("0-9")?

按第一个字符(alpha和数字)分组字符串

你没有说你是否使用LINQ到SQL或LINQ到对象或其他东西。在LINQ to Objects中,我可能会使用:

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

(注意,ToUpper是文化敏感的,顺便说一下-不清楚这是否是您想要的。)

在LINQ to SQL(块lambda不能使用,因为它们不能转换为表达式树)我可能会使用let子句以不同的方式做同样的事情:

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