2009-12-23 35 views

回答

1

一種方式做到這一點:

Products.Where(N => n.ProductName.SubString(0,1)> = 「0」 & & n.ProductName.SubString(0,1)< = 「9」)

+0

這似乎沒有編譯 - operator> =不能應用於字符串和字符串類型的參數。 – itowlson 2009-12-23 02:55:07

+0

如果將Substring(0,1)更改爲[0]並使用chars,則它可以工作:'(b => b.Name [0]> ='0'&& b.Name [0] <='9'' 。 – itowlson 2009-12-23 02:57:39

+0

感謝Randy和itowlson! – AndreMiranda 2009-12-23 03:06:29

5
List<string> digits = Enumerable.Range(0, 10).Select(i => i.ToString()).ToList(); 
var query = from p in db.Products 
      where digits.Contains(p.productName.Substring(0, 1)) 
      select p; 

另外,以下內容添加到您的DBML映射文件:

<Function Name="ISNUMERIC" IsComposable="true"> 
    <Parameter Name="Expression" Parameter="Expression" Type="System.String" DbType="NVarChar(4000)" /> 
    <Return Type="System.Boolean" DbType="BIT NOT NULL"/> 
</Function> 

然後你就可以說:

var query = from p in db.Products 
      where db.ISNUMERIC(p.productName.Substring(0, 1)) 
      select p; 

您可以在XML映射文件做太多,但我不記得的語法把我的頭頂部爲您手動定義DataContext必要的代碼。讓我知道你是否需要這個。

我非常喜歡第一種方法,但如果分析告訴我純粹的LINQ版本是一個性能瓶頸,可以使用SQL內置的ISNUMERIC

相關問題