Jed*_*oky 9 c# sql-server linq-to-sql
我需要选择列值为数字的表格行,任何帮助?
编辑:我有一个varchar列,我需要选择那些数字和那些不是.
编辑2:Integer.TryParse无法使用,因为它无法转换为SQL.
Tim*_*uri 15
在XML编辑器中打开DBML(LINQ-to-SQL)文件,直到文件末尾并将其粘贴到"</ Database>"节点之前:
<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>
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用名为"ISNUMERIC" 的已在SQL中的函数.这是如何做:
var blah = myDataContext.Accounts.Where(account=>
myDataContext.ISNUMERIC(account.ID) == true);
Run Code Online (Sandbox Code Playgroud)
你去:)
您还可以找到这些函数来复制:
<Function Name="RAND" IsComposable="true">
<Return Type="System.Double" DbType="Float NOT NULL" />
</Function>
<Function Name="NEWID" IsComposable="true">
<Return Type="System.Guid" DbType="UniqueIdentifier NOT NULL" />
</Function>
Run Code Online (Sandbox Code Playgroud)
我不知道LinqToSQL中是否存在int.TryParse()的映射,但您可以通过执行查询,转换为List,然后使用LinqToObjects从列表中选择,分两步完成.
int i;
var query = context.Table.ToList();
var intQuery = query.Where( t => int.TryParse( t.Column, out i ) );
Run Code Online (Sandbox Code Playgroud)
您可能也想查看Dynamic LINQ.这将允许你做以下事情:
var query = context.Table.Where( "IsNumeric(Column)" );
Run Code Online (Sandbox Code Playgroud)
编辑动态LINQ可以在VS2008代码示例中找到,链接到Scott Guthrie的博客,我在上面已经链接过了.
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();
}
Run Code Online (Sandbox Code Playgroud)