LINQ select from SQL Server CE:指定类型转换无效
本文关键字:类型转换 无效 CE select from SQL Server LINQ | 更新日期: 2023-09-27 18:13:51
首先,大家好,这是我的第一个帖子。
现在开始,我已经创建了一个SQLCE数据库,创建了数据上下文和所有映射,并成功地用数据负载填充了数据库。到目前为止一切顺利,现在如果我想检索数据,就会遇到问题。
获取数据代码
var codes = (from c in App.BonusDatabase.tbRawData
select c).ToList();
运行I get Specified cast是无效的。我猜在某个地方有一个它不喜欢的值,我怎么才能找到这个值呢?
at System.Data.SqlServerCe.SqlCeDataReader.GetFloat(Int32 ordinal)
at Read_RAW(ObjectMaterializer`1 )
at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at BAT.Bonus.BonusRun(Int32 Week) in Bonus.cs:line 36
at BAT.Bonus.BonusRun() in Bonus.cs:line 25
at BAT.winMain.worker_DoWork(Object sender, DoWorkEventArgs e) in winMain.xaml.cs:line 91
at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
编辑:Ok作为一个作弊,我复制了SQL创建表查询到另一个程序,并让它计算我有多少次int, float等。计票结果与预期一致。然后我用LINQ映射重复了这一点,它有一个匹配的计数,所以我不认为映射是错误的。
编辑2:我只是修改了上面的代码,只选择1个字段,而不是像这样的
var codes = (from c in App.BonusDatabase.tbRawData
select c.CODE).ToList();
这很好,但如果我然后改变到另一个字段
var codes = (from c in App.BonusDatabase.tbRawData
select c.PPH).ToList();
我得到错误。那么这就是那个被夸大了的人吗?如果是这样,可能是什么问题,因为它在SQL数据库和我的映射声明为浮动
看起来你的类和表之间的映射有一个属性映射到一个不兼容类型的数据库字段,例如你有一个int属性映射到一个nvarchar数据库字段。
如何声明tbRawData ?可能其中一个字段定义与数据库中的字段不匹配。