按第一个字符(字母和数字)对字符串进行分组
我有一个字符串(产品名称)列表,我需要从中创建“0-9”、“A”、“B”等形式的产品索引(基于产品名称的第一个字符)。 “Z”。
我正在这样做:
Products.GroupBy(p => p.Name[0].ToUpper())
但这不适用于以“0”..“9”开头的产品名称。
如何修改查询以将所有字母分组到不同的组(“A”..“Z”),以及将所有数字分组到单个组(“0-9”)?
I have a list of strings (product names) from which I need to create a product index (based on first-char of the product name) of the form "0-9", "A", "B", ... "Z".
I am doing this:
Products.GroupBy(p => p.Name[0].ToUpper())
But that doesn't work for the product names which start with "0".."9".
How do I modify the query to group all alphas into different groups ("A".."Z"), as well as all numerics into a single group ("0-9")?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您还没有说您是使用 LINQ to SQL 还是 LINQ to Objects 或其他东西。在 LINQ to Objects 中,我可能会使用:(
顺便说一句,请注意,
ToUpper
是文化敏感的 - 不清楚这是否是您想要的。)在 LINQ to SQL 中(其中块 lambda无法使用,因为它们无法转换为表达式树)我可能会使用
let
子句以不同的方式执行相同的操作:You haven't said whether you're using LINQ to SQL or LINQ to Objects or something else. In LINQ to Objects I'd probably use:
(Note that
ToUpper
is culture-sensitive, by the way - it's not clear whether that's what you want or not.)In LINQ to SQL (where block lambdas can't be used, as they can't be converted to expression trees) I'd probably use a
let
clause to do the same sort of thing in a different way: