【问题标题】:Problem with LINQ in C#C#中的LINQ问题
【发布时间】:2011-03-02 14:29:29
【问题描述】:

我在 C# 中使用 LINQ 时遇到问题,我不断收到“指定的强制转换无效”。这就是我想要做的。

我创建了一个类,我在其中声明了表的所有列。

[表(名称=“tbl_Aff”)] 公共类会员 { [柱子] 公共字符串名称; [柱子] 公共字符串名字; [柱子] 公共字符串姓氏; [柱子] 公共字符串标题; }

然后我声明一个强类型 DataContext,在其中我将所有 Table 集合声明为上下文的成员。

公共部分类数据库:DataContext { public Table 附属; public Database() : base(Settings.getConnectionString()) { } //此方法通过从 XML 文件中读取来获取连接字符串。 } 公共部分类默认值:System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { 数据库数据库 = 新数据库(); 尝试 { var q = from a in database.affiliate 选择一个; foreach (var aff in q) // 这里我得到错误“Specified cast is not valid” { lblMessage.InnerHtml += aff.name + "
"; } } 捕捉(例外前) { System.Console.WriteLine(ex.Message); } } }

【问题讨论】:

  • Table<T> 是一个泛型类 - 但您的代码似乎声明了一个 Table 类型的变量。 affiliate 的确切类型是什么?此外,就它试图从/向什么进行转换而言,转换异常说明了什么?
  • 我刚刚编辑了我的代码忘记格式化代码,sry。 Table 的类型是 Affiliate Table。至于转换异常所说的内容,它只说“指定的转换无效”,没有别的。也许我应该在不同的异常中捕获错误?
  • 请发布异常堆栈跟踪
  • 在 System.Data.SqlClient.SqlBuffer.get_Int32() 在 System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i) 在 Read_Affiliate(ObjectMaterializer1 ) at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader2.MoveNext() 在 new_signup.Default .Page_Load(Object sender, EventArgs e) 在 C:\Users\m.buhagiar\Desktop\Signup_Solution\signupLogic\new_signup\Default.aspx.cs:line 28

标签: c# .net asp.net linq-to-sql


【解决方案1】:

GetInt32() 表明tbl_Aff 的至少一列实际上不是字符串([n]varchar(...)/[n]text),而您没有给出任何提示。这里最简单的技巧是简单地将该属性设为int(因为这显然是它想要的)。

我还想知道Affiliate 是否还有更多您没有显示的内容;接口、基类、单独的部分类等(因为这些列看起来应该是字符串)。

这个问题困扰我的主要时间是当我(例如)在数据库中有一个 tinyint 并且忘记相应地键入一个枚举(在这种情况下为: byte)。

【讨论】:

  • 谢谢您。我手动检查了 Affiliate 类中的所有列是否与数据库中声明的数据类型匹配,并发现我将某些列声明为 int 而不是 Int16。再次感谢。
猜你喜欢
  • 2010-12-19
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多