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

mvc*_*ent 2 c# linq grouping

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

我这样做:

Products.GroupBy(p => p.Name[0].ToUpper())
Run Code Online (Sandbox Code Playgroud)

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

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

Jon*_*eet 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);
});
Run Code Online (Sandbox Code Playgroud)

(注意,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);
Run Code Online (Sandbox Code Playgroud)