Вы не сказали, используете ли вы 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 (где блочные лямбды нельзя использовать, так как они не могут быть преобразованы в деревья выражений), я бы, вероятно, использовал предложение let
, чтобы сделать то же самое по-другому:
var query = from product in products
let c = product.Name[0]
group product by c >= '0' && c <= '9' ? '0' : char.ToUpper(c);