代码之家  ›  专栏  ›  技术社区  ›  Mark Brittingham

为什么在使用Linq到SQL时会出现“无效强制转换”?

  •  5
  • Mark Brittingham  · 技术社区  · 16 年前

    对于Linq到SQL,我是一个有点新手,但我希望你能帮助我。我使用扩展方法编写了以下Linq to SQL语句:

    Cedb.ClassEvents.Where(c => c.ClassID == 1).Select(c => c).Single()
    

    其中,Cedb是Datacontext,ClassEvents是一个表(用于存储在设施中的类和事件),ClassID是唯一的整数键。

    var classEvent = Cedc.ClassEvents.Where(c.ClassID == 1).Select(c => c).Single();
    

    然后我得到一个错误:InvalidCastException:指定的强制转换无效。如果我用“ClassEvent”类代替var,也会发生同样的事情。我对这一点不熟悉,但这一个看起来像是一个真正的扣篮,而不是一个bug。我不知道单一方法是否会导致错误?任何帮助都将不胜感激!

    2 回复  |  直到 16 年前
        1
  •  5
  •   Mark Brittingham    16 年前

    Slace-以及任何其他相关方。“无效强制转换异常”错误的原因是基础数据模型中的更改。smallint字段已更改为bit。因此,当系统试图将查询结果映射到“ClassEvent”数据结构时,模型(尚未更新)和数据表之间的冲突就出现了。

    尽管如此,我还是很感激你的回答!

        2
  •  1
  •   Aaron Powell    16 年前

    http://msdn.microsoft.com/en-us/library/bb535118.aspx ):

    var classEvent = Cedc.ClassEvents.Single(c => c.ClassID == 1);
    

    我还建议不要使用 Single 除非你100%确定 Func<T, bool> 将始终返回一个值,就好像它不返回值一样,您将抛出一个异常。更好的方法是使用 SingleOrDefault 并在与对象交互之前执行空检查( http://msdn.microsoft.com/en-us/library/bb549274.aspx