How to know if a field is numeric in Linq To SQL

前端 未结 7 1056
日久生厌
日久生厌 2020-12-15 11:18

I need to select the rows of a table where a column value is numeric, any Help?

EDIT: I have a varchar column and I need to select the ones that are numbers and the

相关标签:
7条回答
  • 2020-12-15 11:29

    Look into Int32.TryParse ... That may work for you.

    Ian

    0 讨论(0)
  • 2020-12-15 11:30

    (Edited to suit your needs)

    So, given the fact that you cannot use Integer.TryParse, the following is not feasible:

    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));
    

    Is it possible that you create a stored procedure and link it to the DataContext via the Methods Pane? In that case you can do in your SQL the following:

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

    Does this helps?

    0 讨论(0)
  • 2020-12-15 11:41

    I don't know if there is a mapping for int.TryParse() in LinqToSQL, but you could probably do it in two steps by performing the query, casting to a List, then selecting out of the list with LinqToObjects.

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

    You might want to look at Dynamic LINQ, too. That would allow you to do something like:

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

    EDIT Dynamic LINQ is available in the VS2008 Code Samples, linked to from Scott Guthrie's blog, which I've linked above.

    0 讨论(0)
  • 2020-12-15 11:41
    <>.Where(x=>"0123456789".IndexOf(x.value.substring(0,1))>-1)
    
    0 讨论(0)
  • 2020-12-15 11:44

    You will not be able to do this with LINQ2SQL without loading all records on the client.

    I can suggest to create view or table-valued function with aditional calculated column and then filter your results with this column. Or execute regular SQL with DataContext.ExecuteQuery.

    0 讨论(0)
  • 2020-12-15 11:46

    Open up your DBML (LINQ-to-SQL) file in an XML editor, go down to the end of the file and paste this just before the '</Database>' node:

    <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>
    

    Now, you can use the already-in-SQL function called "ISNUMERIC". Here's how:

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

    There you go :)

    You may also find these functions useful to copy:

    <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>
    
    0 讨论(0)
提交回复
热议问题