2011-09-22 138 views
2

我有一个字符串(产品名称)从中我需要创建一个产品指标的清单(根据产品名称的首个字符)的形式“0-9 “,”A“,”B“,...”Z“。分组串的第一个字符(字母和数字)

我这样做:

Products.GroupBy(p => p.Name[0].ToUpper()) 

但是,这并不为与“0” ......“9”启动产品名称工作。

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

回答

7

无论你使用LINQ to SQL或LINQ到对象或别的东西你还没有说。在LINQ到对象我可能会使用:

Products.GroupBy(p = { 
    char c = p.Name[0]; 
    return c >= '0' && c <= '9' ? '0' : char.ToUpper(c); 
}); 

(注意ToUpper是文化敏感的,顺便说一句 - 目前尚不清楚这是否是你想要的或没有。)

在LINQ to SQL (其中块lambda表达式不能使用,因为它们不能转换为表达式树)我可能会使用一个let条款做同样的事情用不同的方式:

var query = from product in products 
      let c = product.Name[0] 
      group product by c >= '0' && c <= '9' ? '0' : char.ToUpper(c); 
+0

我使用EF(linq-to-entities)。你的代码简单而有效。谢谢乔恩。 – mvcstudent

相关问题