Конкретные приведение является недопустимым в LINQ-запрос для сравнения двух таблиц
Проблема
Отображение ошибки в запросе linq "конкретное приведение недопустимо"
at System.Data.DataRowExtensions.UnboxT`1.ValueField(значение объекта)
в System.Data.DataRowExtensions.Поле[Т](Строкаданных строки, строка, столбец columnname)
LinqQuery выдает ошибку
var query1 = (from x in table1.AsEnumerable() join y in table2.AsEnumerable() on x.Field<int>("UnitCode") equals y.Field<int>("UnitCode") where y.Field<decimal>("CurrentMeterReading") > x.Field<decimal>("CurrentMeterReading") select new { UnitCode = x.Field<int>("UnitCode"), CurrentReading = x.Field<decimal>("CurrentMeterReading") }).ToList();
Подробности
Когда make debug первая таблица данных tableReadingExcelsheet извлекает данные из листа excel .
второй datatable readingfromInvoiceTablesql извлекает данные из таблицы wahinvoice в sql .
Мне нужно получить список строк в листе excel, которые имеют текущее чтение меньше, чем
currentreading в таблице wahinvoice для того же UnitCode затем отображается в datagridview .
private void button2_Click(object sender, EventArgs e) { DataTable tableReadingExcelsheet = new DataTable(); tableReadingExcelsheet.Columns.AddRange(new DataColumn[] { new DataColumn("UnitCode", typeof(int)), new DataColumn("CurrentMeterReading", typeof(decimal)) }); tableReadingExcelsheet = ShowdataFromExcel(); DataTable readingfromInvoiceTablesql = new DataTable(); readingfromInvoiceTablesql.Columns.AddRange(new DataColumn[] { new DataColumn("Serial", typeof(int)), new DataColumn("UnitCode", typeof(int)), new DataColumn("CurrentMeterReading", typeof(decimal)) }); readingfromInvoiceTablesql = GetCurrentReadingUnitCodesql(); var query1 = (from x in tableReadingExcelsheet.AsEnumerable() join y in readingfromInvoiceTablesql.AsEnumerable() on x.Field<int>("UnitCode") equals y.Field<int>("UnitCode") where y.Field<decimal>("CurrentMeterReading") > x.Field<decimal>("CurrentMeterReading") select new { UnitCode = x.Field<int>("UnitCode"), CurrentReading = x.Field<decimal>("CurrentMeterReading") }).ToList(); dataGridView1.DataSource = query1; dataGridView1.Refresh(); } //get data from excel success public System.Data.DataTable ShowdataFromExcel() { string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", txtpath.Text); OleDbConnection con = new OleDbConnection(connectionString); con.Open(); string str = @"SELECT [رقم الاستمارة] as [UnitCode],[قراءة العداد]as[CurrentMeterReading] FROM [Sheet5$] "; OleDbCommand com = new OleDbCommand(); com = new OleDbCommand(str, con); OleDbDataAdapter oledbda = new OleDbDataAdapter(); oledbda = new OleDbDataAdapter(com); DataSet ds = new DataSet(); ds = new DataSet(); oledbda.Fill(ds, "[Sheet5$]"); con.Close(); System.Data.DataTable dt = new System.Data.DataTable(); dt = ds.Tables["[Sheet5$]"]; return dt; } //get data from sql wahinvoice success public System.Data.DataTable GetCurrentReadingUnitCodesql() { sqlquery = @"select Serial,UnitCode, CurrentMeterReading from( select Serial,UnitCode, CurrentMeterReading, ROW_NUMBER() OVER(PARTITION BY UnitCode ORDER BY Serial desc) as rn from WAHInvoice) as a where rn = 1"; System.Data.DataTable tbCurrentReading = DataAccess.ExecuteDataTable(sqlquery); return tbCurrentReading; }
[^]
Что я уже пробовал:
specific cast is not valid in linq query when compare two tables