2014-10-08 57 views
2

我試圖找到所有具有大於10,000的SALARIO的條目。在我的SQL Server表中的列SALARIOvarchar型的,我想寫查詢是這樣的在ASP.NET中將varchar與int比較

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

但我得到一個不支持例外。我應該如何處理這種情況?

+0

可能重複到SQL:如何表達「CONVERT(\ [... \] AS INT)「?](http://stackoverflow.com/questions/992189/c-sharp-linq-to-sql-how-to-express-convert-as-int) – Andrei 2014-10-08 16:17:44

+0

什麼是類型變量存儲你的linq查詢的結果? – Bonomi 2014-10-08 16:31:29

+0

我用var' – DelGiudice 2014-10-08 16:34:27

回答

1
from e in db.ASALARIADOS 
where Convert.ToInt32(e.SALARIO) > 10000 
select e; 
+0

這對我不起作用,我收到了這條消息'LINQ實體無法識別'Int64 ToInt64(System.String)'方法,並且此方法無法轉換爲商店表達式。' – DelGiudice 2014-10-08 17:38:34

+0

@DelGiudice我使用了'ToInt32' – Hogan 2014-10-08 17:43:58

+0

@Hogan您無法使用Convert.ToInt32或任何轉換.To ...在linq查詢中,它總會返回一個錯誤。 – 2014-10-08 20:04:49

0

你不能這樣做,因爲最後,這被轉換爲SQL查詢,並且它不能將你的int.Parse轉換爲SQL。

然而,你可以嘗試,是這樣的。

創建一個小功能,將返回在傳入的值是否大於10000

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轉換true或false取決於()。

0

試試這個,我沒有測試過,但我記得在Linq裏用「let」子句和Int32.Parse來完成類似的事情。

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

試試這個作爲一種解決方法:沒有試過一個又但這應該工作的[C#的LINQ

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