LINQ to SQL中的无效转换

Pup*_*ppy 3 c# asp.net linq-to-sql

我使用LINQ to SQL抛出了一个无效的强制转换异常.这是我在C#中的课程:

[Table(Name = "tbl_request$")]
public class request
{
    [Column(IsPrimaryKey = true)]
    public float requestID;
    [Column]
    public string moduleCode;
    [Column]
    public float park;
    [Column]
    public string requestedRoom;
    [Column]
    public float week;
    [Column]
    public float day;
    [Column]
    public float period;
    [Column]
    public float status;
    [Column]
    public float semester;
    [Column]
    public float priority;
    [Column]
    public float adhoc;
    [Column]
    public float numStudents;
    [Column]
    public float collectionID;
    [Column]
    public float roomCount;
}
Run Code Online (Sandbox Code Playgroud)

这对应的数据库表

requestID   float   Unchecked
moduleCode  nvarchar(255)   Checked
park    float   Checked
requestedRoom   nvarchar(255)   Checked
week    float   Checked
day float   Checked
period  float   Checked
status  float   Checked
semester    float   Checked
priority    float   Checked
adhoc   float   Checked
numStudents float   Checked
collectionID    float   Checked
roomCount   float   Checked
Run Code Online (Sandbox Code Playgroud)

一切看起来都很好.还有其他建议吗?

Specified cast is not valid.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidCastException: Specified cast is not valid.

Source Error: 

Line 12:             var bookingtable = Database.DatabaseContext.GetTable<Database.request>();
Line 13:             var dict = new System.Collections.Generic.Dictionary<int, System.Collections.Generic.List<Database.request>>();
Line 14:             foreach (var request in bookingtable)
Line 15:             {
Line 16:                 if (dict[(int)request.collectionID] == null)
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪深入LINQ内部.

Pup*_*ppy 5

事实证明,C#想要一个double?而不是一个float?,即使数据库类型是FLOAT.

  • 顺便说一下,我建议您始终使用可视化设计器来创建模型类.它可能看起来很笨重,但它可以避免许多难以跟踪的错误 - 特别是,如果你转向更高级的主题,如关联.只需在表上定义外键,只需拖放即可在代码中获得正确的关联.如果要将自定义行为添加到设计器类中,只需将这些添加项放在单独的类文件中,并使类为"partial".搜索关键字Linq-to-Sql,partial class,你会发现说明 (2认同)
  • 提醒:SQL server*中的float可以是4字节的存储大小,在这种情况下,ac#float(32位)可能会起作用.但是,具有指定数字精度> 24的SQL服务器浮点将导致8字节的存储大小,除非在c#代码中使用双精度(64位),否则将会出错.我刚遇到同样的问题,它与忘记Nullable指标无关. (2认同)