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

C# 按第一个字符(字母和数字)对字符串进行分组,c#,linq,grouping,C#,Linq,Grouping,我有一个字符串列表(产品名称),我需要从中创建一个形式为“0-9”、“a”、“B”的产品索引(基于产品名称的第一个字符)。。。“Z” 我正在这样做: Products.GroupBy(p => p.Name[0].ToUpper()) 但这不适用于以“0”开头的产品名称。“9” 如何修改查询以将所有字母分组为不同的组(“A”。“Z”),以及将所有数字分组为单个组(“0-9”)?您还没有说明是使用LINQ to SQL还是LINQ to Object还是其他。在LINQ to对象中,我可能

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

我正在这样做:

Products.GroupBy(p => p.Name[0].ToUpper())
但这不适用于以“0”开头的产品名称。“9”


如何修改查询以将所有字母分组为不同的组(“A”。“Z”),以及将所有数字分组为单个组(“0-9”)?

您还没有说明是使用LINQ to SQL还是LINQ to Object还是其他。在LINQ to对象中,我可能会使用:

Products.GroupBy(p = {
    char c = p.Name[0];
    return c >= '0' && c <= '9' ? '0' : char.ToUpper(c);
});
我正在使用EF(linq到实体)。您的代码简单有效。谢谢你,乔恩。
var query = from product in products
            let c = product.Name[0]
            group product by c >= '0' && c <= '9' ? '0' : char.ToUpper(c);