2011-09-22 134 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

相關問題