2017-08-17 64 views
0
OleDbCommand commandSec = new OleDbCommand(); 
commandSec.CommandText = "SELECT [SectionName], [Strand], [ReqGrade], [GradeLevel] FROM tbl_section"; 
OleDbDataAdapter daSec = new OleDbDataAdapter(commandSec); 
commandSec.Connection = conn; 
DataTable dt = new DataTable(); 
DataSet ds = new DataSet(); 
daSec.Fill(dt); 
daSec.Fill(ds, "tbl_section"); 
var section = (from DataRow dr in dt.AsEnumerable() 
    where (double)dr["ReqGrade"] >= Convert.ToDouble(txt_genave.Text) && 
    (string)dr["GradeLevel"] == gradelevel 
    select (string)dr["SectionName"]).FirstOrDefault(); 

我得到一個InvalidCastException: Specified cast it not valid.LINQ to Datatable - 如何在linq查詢where子句中添加if條件?

我需要插入一個類部分到特定的生源基地對他/她GradeLevel和ReqGrade。

+3

你的問題重現您的問題,並避免錯誤是讓一個if條件,但你的錯誤是無效的轉換? –

+0

我想在哪裏更改reqgrade到if條件,因爲我得到了無效的cast先生。 –

+0

無效轉換與if條件無關。您將對象轉換爲'double'或'string'。這些轉換失敗,因爲類型不同(例如,如果'ReqGrade'是一個'string'而不是'double')。但由於我們不知道數據庫中的類型,因此無法進一步提供幫助。 –

回答

0

我認爲你的問題可能是在這裏:

from DataRow dr in dt.AsEnumerable() 

嘗試:

from DataRow dr in dt.Rows.AsEnumerable() 

DataTable本身是不可枚舉,但在它的行爲。

+0

Nothing .AsEnumerable()顯示先生。 –

0

我能夠通過改變

where (double)dr["ReqGrade"] >= ... 

where Convert.ToDouble(dr["ReqGrade"]) >= ...