如何知道Linq To SQL中的字段是否为数字

我需要选择列值为数字的表格行,任何帮助?

编辑:我有一个varchar列,我需要选择那些数字和那些不是。

编辑2:Integer.TryParse无法使用,因为它无法转换为SQL。

我不知道LinqToSQL中是否存在int.TryParse()的映射,但您可以通过执行查询,转换为List,然后使用LinqToObjects从列表中选择,分两步完成。

int i; var query = context.Table.ToList(); var intQuery = query.Where( t => int.TryParse( t.Column, out i ) ); 

您可能也想查看Dynamic LINQ 。 这将允许你做类似的事情:

 var query = context.Table.Where( "IsNumeric(Column)" ); 

编辑动态LINQ可以在VS2008代码示例中找到,链接到我上面链接的Scott Guthrie的博客。

在XML编辑器中打开DBML(LINQ-to-SQL)文件,直到文件末尾并将其粘贴到“”节点之前:

     

现在,您可以使用名为“ISNUMERIC”的已在SQL中的函数。 这是如何做:

 var blah = myDataContext.Accounts.Where(account=> myDataContext.ISNUMERIC(account.ID) == true); 

你去:)

您还可以找到这些函数来复制:

       

SqlFunctions.IsNumeric

http://msdn.microsoft.com/en-us/library/system.data.objects.sqlclient.sqlfunctions.isnumeric.aspx

例如:

  private int GetLastGoodNumber(string PartNum) { return (from row in Db.SerialNo where row.PartNum == PartNum let nullable = System.Data.Objects.SqlClient.SqlFunctions.IsNumeric(row.SerialNumber) where nullable != null select nullable.Value).Max(); } 

看看Int32.TryParse ……这可能对你有用。

伊恩

 <>.Where(x=>"0123456789".IndexOf(x.value.substring(0,1))>-1) 

如果不加载客户端上的所有记录,您将无法使用LINQ2SQL执行此操作。

我可以建议使用aditional计算列创建视图或表值函数,然后使用此列过滤结果。 或者使用DataContext.ExecuteQuery执行常规SQL。

(编辑以满足您的需求)

因此,鉴于您不能使用Integer.TryParse ,以下操作是不可行的:

 int i; var rowsWithInts = (From r In dc.YourRows Where Integer.TryParse(r.Column, i)); var rowsWithoutInts = (From r In dc.YourRows Where !Integer.TryParse(r.Column, i)); 

是否有可能通过方法窗格创建存储过程并将其链接到DataContext? 在这种情况下,您可以在SQL中执行以下操作:

 -- Rows with integers SELECT * FROM your_table WHERE ISNUMERIC(varchar_column) = 1 -- Rows without integers SELECT * FROM your_table WHERE ISNUMERIC(varchar_column) = 0 

这有帮助吗?