我試圖找到所有具有大於10,000的SALARIO
的條目。在我的SQL Server表中的列SALARIO
是varchar
型的,我想寫查詢是這樣的在ASP.NET中將varchar與int比較
from e in db.ASALARIADOS
where int.Parse(e.SALARIO) > 10000
select e;
但我得到一個不支持例外。我應該如何處理這種情況?
我試圖找到所有具有大於10,000的SALARIO
的條目。在我的SQL Server表中的列SALARIO
是varchar
型的,我想寫查詢是這樣的在ASP.NET中將varchar與int比較
from e in db.ASALARIADOS
where int.Parse(e.SALARIO) > 10000
select e;
但我得到一個不支持例外。我應該如何處理這種情況?
from e in db.ASALARIADOS
where Convert.ToInt32(e.SALARIO) > 10000
select e;
這對我不起作用,我收到了這條消息'LINQ實體無法識別'Int64 ToInt64(System.String)'方法,並且此方法無法轉換爲商店表達式。' – DelGiudice 2014-10-08 17:38:34
@DelGiudice我使用了'ToInt32' – Hogan 2014-10-08 17:43:58
@Hogan您無法使用Convert.ToInt32或任何轉換.To ...在linq查詢中,它總會返回一個錯誤。 – 2014-10-08 20:04:49
你不能這樣做,因爲最後,這被轉換爲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取決於()。
試試這個,我沒有測試過,但我記得在Linq裏用「let」子句和Int32.Parse來完成類似的事情。
from e in db.ASALARIADOS
let x = Int32.Parse(e.SALAIO.Trim())
where x > 10000
select e;
試試這個作爲一種解決方法:沒有試過一個又但這應該工作的[C#的LINQ
db.ASALARIADOS.toList().Where(m => Convert.ToInt32(m.SALARIO) > 10000)
可能重複到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
什麼是類型變量存儲你的linq查詢的結果? – Bonomi 2014-10-08 16:31:29
我用var' – DelGiudice 2014-10-08 16:34:27