【问题标题】:Compare varchar to int in ASP.NET在 ASP.NET 中将 varchar 与 int 进行比较
【发布时间】:2014-10-08 16:12:35
【问题描述】:

我正在尝试查找所有 SALARIO 大于 10,000 的条目。我的 SQL Server 表中的SALARIO 列是varchar 类型,我尝试编写的查询是这样的

from e in db.ASALARIADOS 
where int.Parse(e.SALARIO) > 10000 
select e;

但我得到一个不受支持的异常。这种情况应该怎么处理?

【问题讨论】:

  • 存储 linq 查询结果的类型变量是什么?
  • 我用var存储那个查询
  • 我测试了您的查询,但我有一个 bool 而不是 varchar 并且它有效。在.net 中你没有varchar,你会有一个字符串。您确定该代码中引发了异常吗?
  • 真正的 解决方案是使用最合适的 数据类型——首先在数据库中!因此,如果这是一个薪水(一个数值) - 为什么它存储为varchar?!?!?!?修复此问题,将其设为 DECIMAL(20,4) 或任何对您有意义的内容 - 然后您的所有问题都会自动消失......

标签: asp.net sql-server asp.net-mvc


【解决方案1】:
from e in db.ASALARIADOS 
where Convert.ToInt32(e.SALARIO) > 10000 
select e;

【讨论】:

  • 这对我不起作用,我收到此消息LINQ to Entities does not recognize the method 'Int64 ToInt64(System.String)' method, and this method cannot be translated into a store expression.
  • @DelGiudice 我用过ToInt32
  • @Hogan 您不能在 linq 查询中使用 Convert.ToInt32 或任何 Convert.To...,它总是会返回错误。
【解决方案2】:

您不能这样做,因为最终,这将转换为 SQL 查询,并且无法将您的 int.Parse 转换为 SQL。

不过,你可以试试这个。

创建一个小函数,根据传入的值是否大于10000,返回true或false。

    public bool salarioCheck(string salario)
    {
        if (Convert.ToInt32(salario) > 10000)
        { return true; }
        return false;
    }

    public void yourMethod()
    {
        from e in db.ASALARIADOS 
        where salarioCheck(e)
        select e;
    }

所以你基本上是在 salarioCheck() 中进行转换。

【讨论】:

    【解决方案3】:

    试试这个,我还没有测试过,但我记得过去在 Linq 中使用“let”子句和 Int32.Parse 来完成类似的事情。

    from e in db.ASALARIADOS 
    let x = Int32.Parse(e.SALAIO.Trim()) 
    where x > 10000 
    select e;
    

    【讨论】:

      【解决方案4】:

      试试这个作为一种解决方法:还没有尝试过这个,但这应该可以工作

      db.ASALARIADOS.toList().Where(m => Convert.ToInt32(m.SALARIO) > 10000)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-04
        • 1970-01-01
        • 1970-01-01
        • 2014-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多