我有一个字符串列表(产品名称),我需要从中创建“0-9”,“A”,“B”形式的产品索引(基于产品名称的first-char), ......“Z”。
我这样做:
Products.GroupBy(p => p.Name[0].ToUpper())
但这对于以“0”开头的产品名称不起作用。“9”。
如何修改查询以将所有alpha分组到不同的组(“A”...“Z”),以及将所有数字组合成一个组(“0-9”)?
答案 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);